// Note: This is the list of formats // The rules that formats use are stored in data/rulesets.ts /* If you want to add custom formats, create a file in this folder named: "custom-formats.ts" Paste the following code into the file and add your desired formats and their sections between the brackets: -------------------------------------------------------------------------------- // Note: This is the list of formats // The rules that formats use are stored in data/rulesets.ts export const Formats: FormatList = [ ]; -------------------------------------------------------------------------------- If you specify a section that already exists, your format will be added to the bottom of that section. New sections will be added to the bottom of the specified column. The column value will be ignored for repeat sections. */ export const Formats: FormatList = [ // Sw/Sh Singles /////////////////////////////////////////////////////////////////// { section: "Sw/Sh Singles", }, { name: "[Gen 8] Random Battle", desc: `Randomized teams of level-balanced Pokémon with sets that are generated to be competitively viable.`, threads: [ `• Random Battle Suggestions`, ], mod: 'gen8', team: 'random', ruleset: ['PotD', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], }, { name: "[Gen 8] Unrated Random Battle", mod: 'gen8', team: 'random', challengeShow: false, rated: false, ruleset: ['Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], }, { name: "[Gen 8] OU", threads: [ `• OU Metagame Discussion`, `• OU Sample Teams`, `• OU Viability Rankings`, ], mod: 'gen8', ruleset: ['Standard', 'Dynamax Clause'], banlist: ['Uber', 'Arena Trap', 'Moody', 'Shadow Tag', 'Baton Pass'], }, { name: "[Gen 8] OU (Blitz)", mod: 'gen8', ruleset: ['[Gen 8] OU', 'Blitz'], }, { name: "[Gen 8] Ubers", threads: [ `• Ubers Metagame Discussion`, `• Ubers Sample Teams`, `• Ubers Viability Rankings`, ], mod: 'gen8', ruleset: ['Standard', 'Dynamax Ubers Clause'], banlist: ['Baton Pass'], restricted: ['Ditto', 'Kyurem-White', 'Lunala', 'Marshadow', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Reshiram', 'Solgaleo', 'Zekrom'], }, { name: "[Gen 8] UU", threads: [ `• UU Metagame Discussion`, `• UU Sample Teams`, `• UU Viability Rankings`, ], mod: 'gen8', ruleset: ['[Gen 8] OU'], banlist: ['OU', 'UUBL', 'Cinderace', 'Drizzle'], }, { name: "[Gen 8] RU", threads: [ `• RU Metagame Discussion`, `• RU Sample Teams`, `• RU Viability Rankings`, ], mod: 'gen8', ruleset: ['[Gen 8] UU'], banlist: ['UU', 'RUBL'], }, { name: "[Gen 8] NU", threads: [ `• NU Metagame Discussion`, `• NU Viability Rankings`, ], mod: 'gen8', ruleset: ['[Gen 8] RU'], banlist: ['RU', 'NUBL', 'Drought'], }, { name: "[Gen 8] PU", threads: [ `• PU Metagame Discussion`, `• PU Viability Rankings`, ], mod: 'gen8', ruleset: ['[Gen 8] NU'], banlist: ['NU', 'PUBL', 'Heat Rock'], }, { name: "[Gen 8] LC", threads: [ `• LC Metagame Discussion`, `• LC Sample Teams`, `• LC Viability Rankings`, ], mod: 'gen8', maxLevel: 5, ruleset: ['Little Cup', 'Standard', 'Dynamax Clause'], banlist: [ 'Corsola-Galar', 'Cutiefly', 'Drifloon', 'Gastly', 'Gothita', 'Rufflet', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix-Alola', 'Chlorophyll', 'Moody', 'Baton Pass', ], }, { name: "[Gen 8] Monotype", desc: `All the Pokémon on a team must share a type.`, threads: [ `• Monotype Metagame Discussion`, `• Monotype Sample Teams`, `• Monotype Viability Rankings`, ], mod: 'gen8', ruleset: ['Same Type Clause', 'Standard', 'Dynamax Clause'], banlist: [ 'Eternatus', 'Kyurem-Black', 'Kyurem-White', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Reshiram', 'Solgaleo', 'Urshifu-Rapid-Strike', 'Zacian', 'Zamazenta', 'Zekrom', 'Damp Rock', 'Smooth Rock', 'Moody', 'Shadow Tag', 'Baton Pass', ], }, { name: "[Gen 8] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, threads: [ `• 1v1 Metagame Discussion`, `• 1v1 Sample Teams`, `• 1v1 Viability Rankings`, ], mod: 'gen8', teamLength: { validate: [1, 3], battle: 1, }, ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Endless Battle Clause'], banlist: [ 'Cinderace', 'Eternatus', 'Jirachi', 'Kyurem-Black', 'Kyurem-White', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mew', 'Mewtwo', 'Mimikyu', 'Necrozma', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Reshiram', 'Sableye', 'Solgaleo', 'Togekiss', 'Zacian', 'Zamazenta', 'Zekrom', 'Focus Sash', 'Moody', 'Perish Song', ], }, { name: "[Gen 8] Anything Goes", threads: [ `• Anything Goes`, ], mod: 'gen8', searchShow: false, ruleset: ['Obtainable', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'], }, { name: "[Gen 8] ZU", desc: `The unofficial usage-based tier below PU.`, threads: [ `• ZU Metagame Discussion`, ], mod: 'gen8', ruleset: ['[Gen 8] PU'], banlist: ['PU', 'Grapploct', 'Ludicolo', 'Lycanroc-Midnight', 'Musharna', 'Swoobat', 'Thwackey'], }, { name: "[Gen 8] CAP", threads: [ `• CAP Metagame Discussion`, `• CAP Sample Teams`, `• CAP Viability Rankings`, ], mod: 'gen8', ruleset: ['[Gen 8] OU', '+CAP'], banlist: ['Clefable', 'Crucibelle-Mega'], }, { name: "[Gen 8] Battle Stadium Singles", threads: [ `• BSS Discussion`, `• BSS Viability Rankings`, ], mod: 'gen8', forcedLevel: 50, teamLength: { validate: [3, 6], battle: 3, }, ruleset: ['Standard GBU'], banlist: [ 'Cinderace', 'Dragapult', 'Excadrill', 'Gyarados', 'Hippowdon', 'Incineroar', 'Indeedee', 'Magnezone', 'Mimikyu', 'Porygon2', 'Rillaboom', 'Togekiss', 'Torkoal', 'Tyranitar', 'Venusaur', 'Whimsicott', ], minSourceGen: 8, }, { name: "[Gen 8] Custom Game", mod: 'gen8', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, teamLength: { validate: [1, 24], battle: 24, }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, // Sw/Sh Doubles /////////////////////////////////////////////////////////////////// { section: "Sw/Sh Doubles", }, { name: "[Gen 8] Random Doubles Battle", mod: 'gen8', gameType: 'doubles', team: 'random', ruleset: ['PotD', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 8] Doubles OU", threads: [ `• Doubles OU Metagame Discussion`, `• Doubles OU Sample Teams`, `• Doubles OU Viability Rankings`, ], mod: 'gen8', gameType: 'doubles', ruleset: ['Standard Doubles', 'Dynamax Clause'], banlist: ['DUber', 'Beat Up'], }, { name: "[Gen 8] Doubles Ubers", threads: [ `• Doubles Ubers`, ], mod: 'gen8', gameType: 'doubles', ruleset: ['Standard Doubles', '!Gravity Sleep Clause'], banlist: [], }, { name: "[Gen 8] Doubles UU", threads: [ `• Doubles UU`, ], mod: 'gen8', gameType: 'doubles', ruleset: ['[Gen 8] Doubles OU'], banlist: ['DOU', 'DBL'], }, { name: "[Gen 8] VGC 2020", threads: [ `• VGC 2020 Rules`, `• VGC 2020 Sample Teams`, ], mod: 'gen8', gameType: 'doubles', forcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, ruleset: ['Standard GBU', 'VGC Timer'], minSourceGen: 8, }, { name: "[Gen 8] Battle Stadium Doubles", threads: [ `• Series 6 Viability Rankings`, ], mod: 'gen8', gameType: 'doubles', forcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, ruleset: ['Standard GBU', 'VGC Timer'], banlist: [ 'Cinderace', 'Dragapult', 'Excadrill', 'Gyarados', 'Hippowdon', 'Incineroar', 'Indeedee', 'Magnezone', 'Mimikyu', 'Porygon2', 'Rillaboom', 'Togekiss', 'Torkoal', 'Tyranitar', 'Venusaur', 'Whimsicott', ], minSourceGen: 8, }, { name: "[Gen 8] Battle of Legends", threads: [ `• Battle of Legends`, ], mod: 'gen8', gameType: 'doubles', forcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Item Clause', 'Cancel Mod', 'VGC Timer'], minSourceGen: 8, onValidateTeam(team) { const RESTRICTED_LEGENDS = [ 'Mewtwo', 'Mew', 'Celebi', 'Jirachi', 'Reshiram', 'Zekrom', 'Kyurem', 'Keldeo', 'Cosmog', 'Cosmoem', 'Solgaleo', 'Lunala', 'Necrozma', 'Magearna', 'Marshadow', 'Zeraora', 'Meltan', 'Melmetal', 'Zacian', 'Zamazenta', 'Eternatus', 'Zarude', ]; let restrictedCount = 0; for (const set of team) { const species = this.dex.getSpecies(set.species); if (RESTRICTED_LEGENDS.includes(species.baseSpecies)) restrictedCount++; } if (restrictedCount > 1) { return [`You are limited to one restricted legend.`, `(You have ${restrictedCount} restricted legends.)`]; } }, }, { name: "[Gen 8] 2v2 Doubles", desc: `Double battle where you bring four Pokémon to Team Preview and choose only two.`, threads: [ `• 2v2 Doubles`, ], mod: 'gen8', gameType: 'doubles', searchShow: false, teamLength: { validate: [2, 4], battle: 2, }, ruleset: ['Standard Doubles', 'Accuracy Moves Clause', 'Dynamax Clause', 'Sleep Clause Mod'], banlist: [ 'Eternatus', 'Jirachi', 'Kyurem-Black', 'Kyurem-White', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Reshiram', 'Solgaleo', 'Zacian', 'Zamazenta', 'Zekrom', 'Focus Sash', 'Perish Song', 'Swagger', ], }, { name: '[Gen 8] Metronome Battle', threads: [ `• Metronome Battle`, ], mod: 'gen8', gameType: 'doubles', // rated: false, teamLength: { validate: [2, 2], battle: 2, }, ruleset: ['HP Percentage Mod', 'Cancel Mod'], banlist: [ 'Pokestar Spirit', 'Battle Bond', 'Cheek Pouch', 'Cursed Body', 'Desolate Land', 'Dry Skin', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Grassy Surge', 'Huge Power', 'Ice Body', 'Iron Barbs', 'Libero', 'Moody', 'Parental Bond', 'Perish Body', 'Poison Heal', 'Power Construct', 'Pressure', 'Primordial Sea', 'Protean', 'Pure Power', 'Rain Dish', 'Rough Skin', 'Sand Spit', 'Sand Stream', 'Snow Warning', 'Stamina', 'Volt Absorb', 'Water Absorb', 'Wonder Guard', 'Abomasite', 'Aguav Berry', 'Assault Vest', 'Berry', 'Berry Juice', 'Berserk Gene', 'Black Sludge', 'Enigma Berry', 'Figy Berry', 'Gold Berry', 'Iapapa Berry', 'Kangaskhanite', 'Leftovers', 'Mago Berry', 'Medichamite', 'Oran Berry', 'Rocky Helmet', 'Shell Bell', 'Sitrus Berry', 'Wiki Berry', 'Shedinja + Sturdy', 'Harvest + Jaboca Berry', 'Harvest + Rowap Berry', ], onValidateSet(set) { const species = this.dex.getSpecies(set.species); if (species.types.includes('Steel')) { return [`${species.name} is a Steel-type, which is banned from Metronome Battle.`]; } if (species.bst > 625) { return [`${species.name} is banned.`, `(Pok\u00e9mon with a BST higher than 625 are banned)`]; } const item = this.dex.getItem(set.item); if (set.item && item.megaStone) { const megaSpecies = this.dex.getSpecies(item.megaStone); if (species.baseSpecies === item.megaEvolves && megaSpecies.bst > 625) { return [ `${set.name || set.species}'s item ${item.name} is banned.`, `(Pok\u00e9mon with a BST higher than 625 are banned)`, ]; } } if (set.moves.length !== 1 || this.dex.getMove(set.moves[0]).id !== 'metronome') { return [`${set.name || set.species} has illegal moves.`, `(Pok\u00e9mon can only have one Metronome in their moveset)`]; } }, }, { name: "[Gen 8] Doubles Custom Game", mod: 'gen8', gameType: 'doubles', searchShow: false, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, debug: true, teamLength: { validate: [2, 24], battle: 24, }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, // National Dex /////////////////////////////////////////////////////////////////// { section: "National Dex", }, { name: "[Gen 8] National Dex", threads: [ `• National Dex Metagame Discussion`, `• National Dex Sample Teams`, `• National Dex Viability Rankings`, ], mod: 'gen8', ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'], banlist: [ 'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', 'Blaziken', 'Darkrai', 'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lucario-Mega', 'Lugia', 'Lunala', 'Marshadow', 'Metagross-Mega', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Tornadus-Therian', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zamazenta', 'Zekrom', 'Zygarde-Base', 'Zygarde-Complete', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass', ], }, { name: "[Gen 8] National Dex UU", threads: [ `• National Dex UU Metagame Discussion`, `• National Dex UU Resources`, ], mod: 'gen8', ruleset: ['[Gen 8] National Dex'], banlist: [ // National Dex OU 'Blacephalon', 'Chansey', 'Charizard-Mega-Y', 'Cinderace', 'Clefable', 'Corviknight', 'Dragapult', 'Excadrill', 'Ferrothorn', 'Garchomp', 'Garchomp-Mega', 'Gliscor', 'Greninja', 'Heatran', 'Hydreigon', 'Kartana', 'Kommo-o', 'Landorus-Therian', 'Lopunny-Mega', 'Magearna', 'Magnezone', 'Medicham-Mega', 'Melmetal', 'Pelipper', 'Rillaboom', 'Scizor-Mega', 'Serperior', 'Slowbro-Base', 'Slowbro-Mega', 'Swampert-Mega', 'Tangrowth', 'Tapu Fini', 'Tapu Koko', 'Tapu Lele', 'Toxapex', 'Tyranitar', 'Victini', 'Volcanion', 'Volcarona', 'Zapdos', 'nduubl', // National Dex UUBL 'Aegislash', 'Alakazam', 'Azumarill', 'Charizard-Mega-X', 'Deoxys-Defense', 'Diggersby', 'Dragonite', 'Gallade-Mega', 'Gardevoir-Mega', 'Gengar', 'Gyarados', 'Hawlucha', 'Heracross-Mega', 'Hoopa-Unbound', 'Kyurem', 'Latias-Mega', 'Latios', 'Manaphy', 'Mawile-Mega', 'Mew', 'Pinsir-Mega', 'Scolipede', 'Staraptor', 'Thundurus', 'Venusaur-Mega', 'Xurkitree', 'Drizzle', 'Drought', 'Aurora Veil', ], // Used to distinguish UU from below UU in the client restricted: [ 'Alomomola', 'Altaria-Mega', 'Amoonguss', 'Beedrill-Mega', 'Bisharp', 'Blissey', 'Breloom', 'Buzzwole', 'Celesteela', 'Chandelure', 'Conkeldurr', 'Diancie-Mega', 'Hippowdon', 'Infernape', 'Jirachi', 'Keldeo', 'Krookodile', 'Latias', 'Mamoswine', 'Mandibuzz', 'Manectric-Mega', 'Moltres', 'Primarina', 'Rotom-Heat', 'Rotom-Wash', 'Salamence', 'Scizor', 'Tapu Bulu', 'Urshifu-Rapid-Strike', 'Weavile', 'Weezing-Galar', 'Zeraora', ], }, { name: "[Gen 8] National Dex Monotype", threads: [ `• National Dex Monotype`, ], mod: 'gen8', searchShow: false, ruleset: ['Standard NatDex', 'Same Type Clause', 'Species Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'Sleep Clause Mod'], banlist: [ 'Aegislash', 'Arceus', 'Blastoise-Mega', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Magearna', 'Marshadow', 'Metagross-Mega', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Tapu Lele', 'Xerneas', 'Yveltal', 'Zacian', 'Zamazenta', 'Zygarde', 'Arena Trap', 'Battle Bond', 'Moody', 'Shadow Tag', 'Damp Rock', 'Smooth Rock', ], }, { name: "[Gen 8] National Dex AG", threads: [ `• AG Metagame Discussion`, `• AG Sample Teams`, `• AG Viability Rankings`, ], mod: 'gen8', ruleset: ['Standard NatDex'], }, { name: "[Gen 8] National Dex BH", desc: `Balanced Hackmons with National Dex elements mixed in.`, threads: [ `• More Balanced Hackmons`, ], mod: 'gen8', ruleset: ['-Nonexistent', 'Standard NatDex', 'Forme Clause', 'Sleep Clause Mod', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', '!Obtainable'], banlist: [ // Pokemon 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', // Abilities 'Arena Trap', 'Contrary', 'Gorilla Tactics', 'Huge Power', 'Illusion', 'Innards Out', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard', // Items 'Gengarite', // Moves 'Belly Drum', 'Bolt Beak', 'Chatter', 'Double Iron Bash', 'Octolock', 'Shell Smash', // Other 'Comatose + Sleep Talk', ], onValidateSet(set) { if (this.dex.toID(set.ability) === 'intrepidsword' && !this.dex.toID(set.species).startsWith('zacian') && this.dex.toID(set.item) !== 'rustedsword') { return [`${set.ability} is banned.`]; } if (set.species === 'Zacian-Crowned' && (this.dex.toID(set.item) !== 'rustedsword' || this.dex.toID(set.ability) !== 'intrepidsword')) { return [set.species + " is banned."]; } }, onChangeSet(set) { const item = this.dex.toID(set.item); if (set.species === 'Zacian' && item === 'rustedsword') { set.species = 'Zacian-Crowned'; set.ability = 'Intrepid Sword'; const ironHead = set.moves.indexOf('ironhead'); if (ironHead >= 0) { set.moves[ironHead] = 'behemothblade'; } } if (set.species === 'Zamazenta' && item === 'rustedshield') { set.species = 'Zamazenta-Crowned'; set.ability = 'Dauntless Shield'; const ironHead = set.moves.indexOf('ironhead'); if (ironHead >= 0) { set.moves[ironHead] = 'behemothbash'; } } }, onValidateTeam(team) { let arceus = 0; for (const set of team) { const species = this.dex.getSpecies(set.species); if (species.baseSpecies === "Arceus") arceus++; } if (arceus > 1) { return [`You are limited to one Arceus forme.`, `(You have ${arceus} Arceus formes.)`]; } }, }, // Pet Mods /////////////////////////////////////////////////////////////////// { section: "Pet Mods", }, { name: "[Gen 8] ViAbilities", desc: `All abilities are modified to become viable in [Gen 8] OU.`, threads: [ `• ViAbilities`, ], mod: 'viabilities', ruleset: ['[Gen 8] OU'], // Dumb hack because Jolteon has 5 abilities for some reason validateSet(set, teamHas) { const species = this.dex.getSpecies(set.species); const ability = this.dex.getAbility(set.ability); if (!(species.name === 'Jolteon' && ability.name === 'Run Away')) { return this.validateSet(set, teamHas); } else { const abil = set.ability; set.ability = 'Battery'; const fakeValidation = this.validateSet(set, teamHas); if (fakeValidation?.length) return fakeValidation; set.ability = abil; return null; } }, }, { name: "[Gen 8] CCAPM 2020", desc: `A community-created Pet Mod.`, threads: [ `• CCAPM 2020`, ], mod: 'ccapm2', searchShow: false, ruleset: ['Obtainable', '!Obtainable Abilities', 'Species Clause', 'Nickname Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Sleep Clause Mod', 'Endless Battle Clause'], banlist: ['All Pokemon', 'All Abilities', 'Baton Pass'], unbanlist: [ // Pokemon 'Aegislash', 'Beheeyem', 'Camerupt', 'Chesnaught', 'Crabominable', 'Delibird', 'Dragonair', 'Eelektross', 'Empoleon', 'Frosmoth', 'Garchomp', 'Golbat', 'Heatmor', 'Jellicent', 'Lycanroc-Dusk', 'Oricorio-Sensu', 'Porygon2', 'Reshiram', 'Skuntank', 'Togedemaru', 'Whimsicott', 'Wigglytuff', 'Wormadam-Trash', // Abilities 'Adaptive', 'Contradict', 'Counter Shield', 'Elemental', 'Embargo Act', 'Exhaust', 'Forager', 'Identity Theft', 'Inextremis', 'Lag Behind', 'Prepared', 'Survey', 'Terror', 'Trigger Finger', 'Unflagging', ], }, { name: "[Gen 6] Gen-NEXT OU", mod: 'gennext', searchShow: false, challengeShow: false, ruleset: ['Obtainable', 'Standard NEXT', 'Team Preview'], banlist: ['Uber'], }, // OM of the Month /////////////////////////////////////////////////////////////////// { section: "OM of the Month", column: 2, }, { name: "[Gen 8] Camomons", desc: `Pokémon change type to match their first two moves.`, threads: [ `• Camomons`, ], mod: 'gen8', ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Sleep Clause Mod', 'Endless Battle Clause'], banlist: [ 'Darmanitan-Galar', 'Dracovish', 'Eternatus', 'Heracross', 'Hydreigon', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Reshiram', 'Shedinja', 'Solgaleo', 'Zacian', 'Zamazenta', 'Zekrom', 'Zeraora', 'Arena Trap', 'Moody', 'Shadow Tag', 'Baton Pass', ], onModifySpecies(species, target, source, effect) { if (!target) return; // Chat command if (effect && ['imposter', 'transform'].includes(effect.id)) return; const types = [...new Set(target.baseMoveSlots.slice(0, 2).map(move => this.dex.getMove(move.id).type))]; return {...species, types: types}; }, onSwitchIn(pokemon) { this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]'); }, onAfterMega(pokemon) { this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]'); }, }, { name: "[Gen 8] NFE", desc: `Only Pokémon that can evolve are allowed.`, threads: [ `• NFE Metagame Discussion`, `• NFE Resources`, ], mod: 'gen8', ruleset: ['Not Fully Evolved', 'Standard', 'Dynamax Clause'], banlist: [ 'Chansey', 'Doublade', 'Gurdurr', 'Haunter', 'Ivysaur', 'Magneton', 'Mr. Mime-Galar', 'Pawniard', 'Pikachu', 'Porygon2', 'Rhydon', 'Rufflet', 'Scyther', 'Sneasel', 'Type: Null', 'Arena Trap', 'Shadow Tag', 'Baton Pass', ], }, // Other Metagames /////////////////////////////////////////////////////////////////// { section: "Other Metagames", column: 2, }, { name: "[Gen 8] Balanced Hackmons", desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`, threads: [ `• Balanced Hackmons`, `• BH Resources`, ], mod: 'gen8', ruleset: ['-Nonexistent', 'OHKO Clause', 'Evasion Moves Clause', 'Forme Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Endless Battle Clause'], banlist: [ 'Eternatus-Eternamax', 'Shedinja', 'Comatose + Sleep Talk', 'Double Iron Bash', 'Octolock', 'Shell Smash', 'Arena Trap', 'Contrary', 'Gorilla Tactics', 'Huge Power', 'Illusion', 'Innards Out', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard', ], onValidateSet(set) { if (set.species === 'Zacian-Crowned' && (this.dex.toID(set.item) !== 'rustedsword' || this.dex.toID(set.ability) !== 'intrepidsword')) { return [set.species + " is banned."]; } }, onChangeSet(set) { const item = this.dex.toID(set.item); if (set.species === 'Zacian' && item === 'rustedsword') { set.species = 'Zacian-Crowned'; set.ability = 'Intrepid Sword'; const ironHead = set.moves.indexOf('ironhead'); if (ironHead >= 0) { set.moves[ironHead] = 'behemothblade'; } } if (set.species === 'Zamazenta' && item === 'rustedshield') { set.species = 'Zamazenta-Crowned'; set.ability = 'Dauntless Shield'; const ironHead = set.moves.indexOf('ironhead'); if (ironHead >= 0) { set.moves[ironHead] = 'behemothbash'; } } }, }, { name: "[Gen 8] Mix and Mega", desc: `Mega evolve any Pokémon with any mega stone and no limit. Boosts based on mega evolution from gen 7.`, threads: [ `• Mix and Mega`, `• M&M Resources`, ], mod: 'mixandmega', ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Sleep Clause Mod', 'Endless Battle Clause'], banlist: [ 'Eternatus', 'Lunala', 'Zacian-Crowned', 'Moody', 'Shadow Tag', 'Baton Pass', 'Electrify', 'Beedrillite', 'Blazikenite', 'Gengarite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', ], restricted: ['Gengar', 'Kyurem-Black', 'Kyurem-White', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Reshiram', 'Solgaleo', 'Zacian', 'Zekrom', 'Zeraora'], onValidateTeam(team) { const itemTable = new Set(); for (const set of team) { const item = this.dex.getItem(set.item); if (!item || !item.megaStone) continue; const species = this.dex.getSpecies(set.species); if (species.isNonstandard) return [`${species.baseSpecies} does not exist in gen 8.`]; if (this.ruleTable.isRestrictedSpecies(species)) { return [`${species.name} is not allowed to hold ${item.name}.`]; } if (itemTable.has(item.id)) { return [`You are limited to one of each mega stone.`, `(You have more than one ${item.name})`]; } itemTable.add(item.id); } }, onBegin() { for (const pokemon of this.getAllPokemon()) { pokemon.m.originalSpecies = pokemon.baseSpecies.name; } }, onSwitchIn(pokemon) { // @ts-ignore const oMegaSpecies = this.dex.getSpecies(pokemon.species.originalMega); if (oMegaSpecies.exists && pokemon.m.originalSpecies !== oMegaSpecies.baseSpecies) { // Place volatiles on the Pokémon to show its mega-evolved condition and details this.add('-start', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]'); const oSpecies = this.dex.getSpecies(pokemon.m.originalSpecies); if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) { this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); } } }, onSwitchOut(pokemon) { // @ts-ignore const oMegaSpecies = this.dex.getSpecies(pokemon.species.originalMega); if (oMegaSpecies.exists && pokemon.m.originalSpecies !== oMegaSpecies.baseSpecies) { this.add('-end', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]'); } }, }, { name: "[Gen 8] Almost Any Ability", desc: `Pokémon have access to almost any ability.`, threads: [ `• Almost Any Ability`, ], mod: 'gen8', ruleset: ['Obtainable', '!Obtainable Abilities', 'Species Clause', 'Nickname Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Sleep Clause Mod', 'Endless Battle Clause'], banlist: [ 'Dracovish', 'Dragapult', 'Eternatus', 'Keldeo', 'Kyurem-Black', 'Kyurem-White', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Reshiram', 'Shedinja', 'Solgaleo', 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zamazenta', 'Zekrom', 'Zeraora', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Intrepid Sword', 'Libero', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Protean', 'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'Baton Pass', ], }, { name: "[Gen 8] STABmons", desc: `Pokémon can use any move of their typing, in addition to the moves they can normally learn.`, threads: [ `• STABmons`, ], mod: 'gen8', ruleset: ['Standard', 'STABmons Move Legality', 'Dynamax Clause'], banlist: [ 'Darmanitan', 'Darmanitan-Galar', 'Dracovish', 'Dragapult', 'Eternatus', 'Gengar', 'Kyurem-Black', 'Kyurem-White', 'Lunala', 'Marshadow', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Porygon-Z', 'Reshiram', 'Silvally', 'Solgaleo', 'Zacian', 'Zamazenta', 'Zekrom', 'King\'s Rock', 'Moody', 'Shadow Tag', 'Baton Pass', ], restricted: ['Acupressure', 'Belly Drum', 'Bolt Beak', 'Double Iron Bash', 'Electrify', 'Extreme Speed', 'Fishious Rend', 'Shell Smash', 'Shift Gear', 'Spore', 'V-create', 'Wicked Blow'], }, { name: "[Gen 8] Cross Evolution", desc: `Give a Pokémon a Pokémon name of the next evolution stage as a nickname to inherit stat changes, typing, abilities, and stats, from the next stage Pokémon.`, threads: [ `• Cross Evolution`, ], mod: 'gen8', searchShow: false, ruleset: ['Standard', 'Dynamax Clause'], banlist: ['Corsola-Galar', 'Sneasel', 'Type: Null', 'Arena Trap', 'Ice Scales', 'Moody', 'Baton Pass', 'King\'s Rock'], restricted: ['Chansey', 'Lunala', 'Shedinja', 'Solgaleo', 'Gorilla Tactics', 'Huge Power', 'Pure Power', 'Shadow Tag'], onValidateTeam(team) { const names = new Set(); for (const set of team) { const name = set.name; if (names.has(this.dex.toID(name))) { return [ `Your Pok\u00e9mon must have different nicknames.`, `(You have more than one Pok\u00e9mon named '${name}')`, ]; } names.add(this.dex.toID(name)); } if (!names.size) { return [ `${this.format.name} works using nicknames; your team has 0 nicknamed Pok\u00e9mon.`, `(If this was intentional, add a nickname to one Pok\u00e9mon that isn't the name of a Pok\u00e9mon species.)`, ]; } }, checkLearnset(move, species, lsetData, set) { // @ts-ignore if (!set.sp || !set.sp.exists || !set.crossSpecies || !set.crossSpecies.exists) { return this.checkLearnset(move, species, lsetData, set); } // @ts-ignore const problem = this.checkLearnset(move, set.sp); if (!problem) return null; // @ts-ignore if (!set.crossMovesLeft) return problem; // @ts-ignore if (this.checkLearnset(move, set.crossSpecies)) return problem; // @ts-ignore set.crossMovesLeft--; return null; }, validateSet(set, teamHas) { const crossSpecies = this.dex.getSpecies(set.name); const onChangeSet = this.dex.getFormat('Pokemon').onChangeSet; let problems = onChangeSet ? onChangeSet.call(this, set, this.format) : null; if (Array.isArray(problems) && problems.length) return problems; if (!crossSpecies.exists || crossSpecies.isNonstandard) return this.validateSet(set, teamHas); const species = this.dex.getSpecies(set.species); const check = this.checkSpecies(set, species, species, {}); if (check) return [check]; if (!species.exists || species.isNonstandard || species === crossSpecies) return this.validateSet(set, teamHas); if (!species.nfe) return [`${species.name} cannot cross evolve because it doesn't evolve.`]; const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable"); if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) { return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it isn't an evolution.`]; } if (this.ruleTable.isRestrictedSpecies(crossSpecies)) { return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it is banned.`]; } const crossPrevoSpecies = this.dex.getSpecies(crossSpecies.prevo); if (!crossPrevoSpecies.prevo !== !species.prevo) { return [ `${species.name} cannot cross evolve into ${crossSpecies.name} because they are not consecutive evolution stages.`, ]; } const ability = this.dex.getAbility(set.ability); if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) { set.species = crossSpecies.name; } // @ts-ignore set.sp = species; // @ts-ignore set.crossSpecies = crossSpecies; // @ts-ignore set.crossMovesLeft = 2; problems = this.validateSet(set, teamHas); set.name = crossSpecies.name; set.species = species.name; return problems; }, onModifySpecies(species, target, source, effect) { if (!target) return; // chat if (effect && ['imposter', 'transform'].includes(effect.id)) return; if (target.set.name === target.set.species) return; const crossSpecies = this.dex.getSpecies(target.set.name); if (!crossSpecies.exists) return; if (species.battleOnly || !species.nfe) return; const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable"); if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) return; const crossPrevoSpecies = this.dex.getSpecies(crossSpecies.prevo); if (!crossPrevoSpecies.prevo !== !species.prevo) return; const mixedSpecies = this.dex.deepClone(species); mixedSpecies.baseSpecies = mixedSpecies.name = `${species.name}-${crossSpecies.name}`; mixedSpecies.weightkg = Math.max(0.1, +(species.weightkg + crossSpecies.weightkg - crossPrevoSpecies.weightkg)).toFixed(1); mixedSpecies.nfe = false; mixedSpecies.evos = []; mixedSpecies.eggGroups = crossSpecies.eggGroups; mixedSpecies.abilities = crossSpecies.abilities; let i: StatName; for (i in species.baseStats) { const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i]; mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255); } if (crossSpecies.types[0] !== crossPrevoSpecies.types[0]) mixedSpecies.types[0] = crossSpecies.types[0]; if (crossSpecies.types[1] !== crossPrevoSpecies.types[1]) { mixedSpecies.types[1] = crossSpecies.types[1] || crossSpecies.types[0]; } if (mixedSpecies.types[0] === mixedSpecies.types[1]) mixedSpecies.types = [mixedSpecies.types[0]]; return mixedSpecies; }, onBegin() { for (const pokemon of this.getAllPokemon()) { pokemon.baseSpecies = pokemon.species; } }, }, { name: "[Gen 8] Godly Gift", desc: `Each Pokémon receives one base stat from a God (Uber Pokémon) depending on its position in the team. If there is no Uber Pokémon, it uses the Pokémon in the first slot.`, threads: [ `• Godly Gift`, ], mod: 'gen8', searchShow: false, ruleset: ['Standard', 'Dynamax Clause'], banlist: ['Blissey', 'Chansey', 'Toxapex', 'Uber > 1', 'AG + Uber > 1', 'Arena Trap', 'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag', 'Baton Pass'], onModifySpecies(species, target, source) { if (source || !target || !target.side) return; const god = target.side.team.find(set => { let godSpecies = this.dex.getSpecies(set.species); const validator = this.dex.getRuleTable(this.dex.getFormat(`gen${this.gen}ou`)); if (this.toID(set.ability) === 'powerconstruct' && this.gen === 7) { return true; } if (set.item) { const item = this.dex.getItem(set.item); if (item.megaEvolves === set.species) godSpecies = this.dex.getSpecies(item.megaStone); } const isBanned = validator.isBannedSpecies(godSpecies); return isBanned; }) || target.side.team[0]; const stat = ['hp', 'atk', 'def', 'spa', 'spd', 'spe'][target.side.team.indexOf(target.set)]; const newSpecies = this.dex.deepClone(species); let godSpecies = this.dex.getSpecies(god.species); if (godSpecies.forme === 'Crowned') { godSpecies = this.dex.getSpecies(godSpecies.changesFrom || godSpecies.baseSpecies); } newSpecies.baseStats[stat] = godSpecies.baseStats[stat as StatName]; return newSpecies; }, }, { name: "[Gen 8] Inheritance", desc: `Pokémon may use the ability and moves of another, as long as they forfeit their own learnset.`, threads: [ `• Inheritance`, ], mod: 'gen8', searchShow: false, ruleset: ['Standard', 'Dynamax Clause'], banlist: [ 'Blissey', 'Chansey', 'Darmanitan-Galar', 'Dracovish', 'Eternatus', 'Kyurem-Black', 'Kyurem-White', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Reshiram', 'Shedinja', 'Solgaleo', 'Urshifu-Base', 'Zacian', 'Zamazenta', 'Zekrom', 'Arena Trap', 'Huge Power', 'Imposter', 'Innards Out', 'Libero', 'Moody', 'Pure Power', 'Shadow Tag', 'Simple', 'Water Bubble', 'Baton Pass', 'Bolt Beak', 'Fishious Rend', 'Shell Smash', ], restricted: ['Torkoal', 'Toxtricity'], getEvoFamily(speciesid) { let species = Dex.getSpecies(speciesid); while (species.prevo) { species = Dex.getSpecies(species.prevo); } return species.id; }, validateSet(set, teamHas) { const unreleased = (pokemon: Species) => pokemon.tier === "Unreleased" && pokemon.isNonstandard === "Unobtainable"; if (!teamHas.abilityMap) { teamHas.abilityMap = Object.create(null); for (const speciesid in Dex.data.Pokedex) { const pokemon = this.dex.getSpecies(speciesid); if (pokemon.isNonstandard || unreleased(pokemon)) continue; if (pokemon.requiredAbility || pokemon.requiredItem || pokemon.requiredMove) continue; if (this.ruleTable.isRestrictedSpecies(pokemon)) continue; for (const key of Object.values(pokemon.abilities)) { const abilityId = this.dex.toID(key); if (abilityId in teamHas.abilityMap) { teamHas.abilityMap[abilityId][pokemon.evos ? 'push' : 'unshift'](speciesid); } else { teamHas.abilityMap[abilityId] = [speciesid]; } } } } const problem = this.validateForme(set); if (problem.length) return problem; const species = this.dex.getSpecies(set.species); if (!species.exists || species.num < 1) return [`The Pok\u00e9mon "${set.species}" does not exist.`]; if (species.isNonstandard || unreleased(species)) { return [`${species.name} is not obtainable in Generation ${this.dex.gen}.`]; } const name = set.name; if (this.ruleTable.isBannedSpecies(species)) { return this.validateSet(set, teamHas); } const ability = this.dex.getAbility(set.ability); if (!ability.exists || ability.isNonstandard) return [`${name} needs to have a valid ability.`]; const pokemonWithAbility = teamHas.abilityMap[ability.id]; if (!pokemonWithAbility) return [`${this.dex.getAbility(set.ability).name} is not available on a legal Pok\u00e9mon.`]; // @ts-ignore this.format.debug = true; if (!teamHas.abilitySources) teamHas.abilitySources = Object.create(null); const validSources: string[] = teamHas.abilitySources[this.dex.toID(set.species)] = []; // Evolution families let canonicalSource = ''; // Specific for the basic implementation of Donor Clause (see onValidateTeam). for (const donor of pokemonWithAbility) { const donorSpecies = this.dex.getSpecies(donor); let format = this.format; if (!format.getEvoFamily) format = this.dex.getFormat('gen8inheritance'); const evoFamily = format.getEvoFamily!(donorSpecies.id); if (validSources.includes(evoFamily)) continue; set.species = donorSpecies.name; set.name = donorSpecies.baseSpecies; const problems = this.validateSet(set, teamHas) || []; if (!problems.length) { validSources.push(evoFamily); canonicalSource = donorSpecies.name; } // Specific for the basic implementation of Donor Clause (see onValidateTeam). if (validSources.length > 1) break; } // @ts-ignore this.format.debug = false; set.name = name; set.species = species.name; if (!validSources.length) { if (pokemonWithAbility.length > 1) return [`${name}'s set is illegal.`]; return [`${name} has an illegal set with an ability from ${this.dex.getSpecies(pokemonWithAbility[0]).name}.`]; } // Protocol: Include the data of the donor species in the `ability` data slot. // Afterwards, we are going to reset the name to what the user intended. set.ability = `${set.ability}0${canonicalSource}`; return null; }, onValidateTeam(team, f, teamHas) { // Donor Clause const evoFamilyLists = []; for (const set of team) { const abilitySources = teamHas.abilitySources?.[this.dex.toID(set.species)]; if (!abilitySources) continue; let format = this.format; if (!format.getEvoFamily) format = this.dex.getFormat('gen8inheritance'); evoFamilyLists.push(abilitySources.map(format.getEvoFamily!)); } // Checking actual full incompatibility would require expensive algebra. // Instead, we only check the trivial case of multiple Pokémon only legal for exactly one family. FIXME? const requiredFamilies = Object.create(null); for (const evoFamilies of evoFamilyLists) { if (evoFamilies.length !== 1) continue; const [familyId] = evoFamilies; if (!(familyId in requiredFamilies)) requiredFamilies[familyId] = 1; requiredFamilies[familyId]++; if (requiredFamilies[familyId] > 2) { return [ `You are limited to up to two inheritances from each evolution family by the Donor Clause.`, `(You inherit more than twice from ${this.dex.getSpecies(familyId).name}).`, ]; } } }, onBegin() { for (const pokemon of this.getAllPokemon()) { if (pokemon.baseAbility.includes('0')) { const donor = pokemon.baseAbility.split('0')[1]; pokemon.m.donor = this.toID(donor); pokemon.baseAbility = this.toID(pokemon.baseAbility.split('0')[0]); pokemon.ability = pokemon.baseAbility; } } }, onSwitchIn(pokemon) { if (!pokemon.m.donor) return; const donorTemplate = this.dex.getSpecies(pokemon.m.donor); if (!donorTemplate.exists) return; // Place volatiles on the Pokémon to show the donor details. this.add('-start', pokemon, donorTemplate.name, '[silent]'); }, }, { name: "[Gen 8] Pure Hackmons", desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`, threads: [ `• Pure Hackmons`, ], mod: 'gen8', searchShow: false, ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'], }, { name: "[Gen 8] Shared Power", desc: `Once a Pokémon switches in, its ability is shared with the rest of the team.`, threads: [ `• Shared Power`, ], mod: 'gen8', searchShow: false, ruleset: ['Standard', 'Dynamax Clause'], banlist: [ 'Darmanitan-Galar', 'Eternatus', 'Kyurem-Black', 'Kyurem-White', 'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Reshiram', 'Shedinja', 'Solgaleo', 'Toxapex', 'Zacian', 'Zamazenta', 'Zekrom', 'Leppa Berry', 'Baton Pass', 'Arena Trap', 'Contrary', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Electric Surge ++ Surge Surfer', 'Flare Boost', 'Fur Coat', 'Guts', 'Harvest', 'Huge Power', 'Imposter', 'Innards Out', 'Libero', 'Magic Bounce', 'Magic Guard', 'Mold Breaker', 'Moody', 'Neutralizing Gas', 'Regenerator ++ Emergency Exit', 'Regenerator ++ Wimp Out', 'Sand Rush', 'Sand Veil', 'Shadow Tag', 'Simple', 'Slush Rush', 'Snow Cloak', 'Speed Boost', 'Steelworker ++ Steely Spirit', 'Tinted Lens', 'Unaware', 'Unburden', 'Water Bubble', ], getSharedPower(pokemon) { const sharedPower = new Set(); for (const ally of pokemon.side.pokemon) { if (ally.previouslySwitchedIn > 0) { if (['mirrorarmor', 'trace'].includes(ally.baseAbility)) continue; sharedPower.add(ally.baseAbility); } } sharedPower.delete(pokemon.baseAbility); return sharedPower; }, onBeforeSwitchIn(pokemon) { let format = this.format; if (!format.getSharedPower) format = this.dex.getFormat('gen8sharedpower'); for (const ability of format.getSharedPower!(pokemon)) { const effect = 'ability:' + ability; pokemon.volatiles[effect] = {id: this.toID(effect), target: pokemon}; } }, onSwitchInPriority: 2, onSwitchIn(pokemon) { let format = this.format; if (!format.getSharedPower) format = this.dex.getFormat('gen8sharedpower'); for (const ability of format.getSharedPower!(pokemon)) { const effect = 'ability:' + ability; delete pokemon.volatiles[effect]; pokemon.addVolatile(effect); } }, field: { suppressingWeather() { for (const side of this.battle.sides) { for (const pokemon of side.active) { if (pokemon && !pokemon.ignoringAbility() && pokemon.hasAbility('Cloud Nine')) { return true; } } } return false; }, }, pokemon: { hasAbility(ability) { if (this.ignoringAbility()) return false; if (Array.isArray(ability)) return ability.some(abil => this.hasAbility(abil)); const abilityid = this.battle.toID(ability); return this.ability === abilityid || !!this.volatiles['ability:' + abilityid]; }, }, }, { name: "[Gen 8] Tier Shift", desc: `Pokémon below OU get all their stats boosted. UU/RUBL get +10, RU/NUBL get +20, NU/PUBL get +30, and PU or lower get +40.`, threads: [ `• Tier Shift`, ], mod: 'gen8', searchShow: false, ruleset: ['[Gen 8] OU'], banlist: ['Damp Rock', 'Eviolite', 'Heat Rock'], onModifySpecies(species, target, source, effect) { if (!species.baseStats) return; const boosts: {[tier: string]: number} = { uu: 10, rubl: 10, ru: 20, nubl: 20, nu: 30, publ: 30, pu: 40, nfe: 40, lcuber: 40, lc: 40, }; const tier = this.toID(species.tier) || 'ou'; if (!(tier in boosts)) return; const pokemon: Species = this.dex.deepClone(species); const boost = boosts[tier]; let statName: StatName; for (statName in pokemon.baseStats) { if (statName === 'hp') continue; pokemon.baseStats[statName] = this.clampIntRange(pokemon.baseStats[statName] + boost, 1, 255); } return pokemon; }, }, { name: "[Gen 8] Trademarked", desc: `Sacrifice your Pokémon's ability for a status move that activates on switch-in.`, threads: [ `• Trademarked`, ], mod: 'gen8', searchShow: false, ruleset: ['Standard', 'Dynamax Clause'], banlist: [ 'Darmanitan-Galar', 'Dracovish', 'Dragapult', 'Eternatus', 'Kyurem-Black', 'Kyurem-White', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Reshiram', 'Solgaleo', 'Zacian', 'Zamazenta', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Baton Pass', ], restricted: [ 'Baneful Bunker', 'Block', 'Copycat', 'Detect', 'Destiny Bond', 'Disable', 'Encore', 'Ingrain', 'King\'s Shield', 'Mean Look', 'move:Metronome', 'Obstruct', 'Octolock', 'Nature Power', 'Parting Shot', 'Psycho Shift', 'Protect', 'Roar', 'Skill Swap', 'Sleep Talk', 'Spiky Shield', 'Substitute', 'Teleport', 'Whirlwind', 'Wish', 'Yawn', ], onValidateTeam(team, format, teamHas) { const problems = []; for (const trademark in teamHas.trademarks) { if (teamHas.trademarks[trademark] > 1) { problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks[trademark]} Pok\u00e9mon with ${trademark} as a Trademark.)`); } } return problems; }, validateSet(set, teamHas) { const dex = this.dex; const ability = dex.getMove(set.ability); if (ability.category !== 'Status' || ability.status === 'slp' || this.ruleTable.isRestricted(`move:${ability.id}`) || set.moves.map(this.dex.toID).includes(ability.id)) { return this.validateSet(set, teamHas); } const customRules = this.format.customRules || []; if (!customRules.includes('!obtainableabilities')) customRules.push('!obtainableabilities'); // const TeamValidator: new (format: string | Format) => TeamValidator = this.constructor as TeamValidator; const validator = new TeamValidator(dex.getFormat(`${this.format.id}@@@${customRules.join(',')}`)); const moves = set.moves; set.moves = [ability.id]; set.ability = dex.getSpecies(set.species).abilities['0']; let problems = validator.validateSet(set, {}) || []; if (problems.length) return problems; set.moves = moves; set.ability = dex.getSpecies(set.species).abilities['0']; problems = problems.concat(validator.validateSet(set, teamHas) || []); set.ability = ability.id; if (!teamHas.trademarks) teamHas.trademarks = {}; teamHas.trademarks[ability.name] = (teamHas.trademarks[ability.name] || 0) + 1; return problems.length ? problems : null; }, pokemon: { getAbility() { const move = this.battle.dex.getMove(this.battle.toID(this.ability)); if (!move.exists) return Object.getPrototypeOf(this).getAbility.call(this); return { id: move.id, name: move.name, onStart(pokemon) { this.add('-activate', pokemon, 'ability: ' + move.name); this.useMove(move, pokemon); }, toString() { return ""; }, }; }, }, }, { name: "[Gen 7] Balanced Hackmons", desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`, threads: [ `• USM Balanced Hackmons`, ], mod: 'gen7', searchShow: false, ruleset: ['-Nonexistent', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'CFZ Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Endless Battle Clause'], banlist: [ 'Groudon-Primal', 'Rayquaza-Mega', 'Gengarite', 'Comatose + Sleep Talk', 'Chatter', 'Arena Trap', 'Contrary', 'Huge Power', 'Illusion', 'Innards Out', 'Magnet Pull', 'Moody', 'Parental Bond', 'Protean', 'Psychic Surge', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard', ], }, // Randomized Metas /////////////////////////////////////////////////////////////////// { section: "Randomized Metas", column: 2, }, { name: "[Gen 8] Monotype Random Battle", mod: 'gen8', team: 'random', ruleset: ['Obtainable', 'Same Type Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], }, { name: "[Gen 8] Challenge Cup 1v1", mod: 'gen8', team: 'randomCC', teamLength: { battle: 1, }, ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview', 'Dynamax Clause'], }, { name: "[Gen 8] Challenge Cup 2v2", mod: 'gen8', team: 'randomCC', gameType: 'doubles', teamLength: { battle: 2, }, searchShow: false, ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview', 'Dynamax Clause'], }, { name: "[Gen 8] Hackmons Cup", desc: `Randomized teams of level-balanced Pokémon with absolutely any ability, moves, and item.`, mod: 'gen8', team: 'randomHC', ruleset: ['Obtainable Formes', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 8] Doubles Hackmons Cup", mod: 'gen8', gameType: 'doubles', team: 'randomHC', searchShow: false, ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 8] CAP 1v1", desc: `Randomly generated 1v1-style teams only including Pokémon made by the Create-A-Pokémon Project.`, threads: [ `• CAP 1v1`, ], mod: 'gen8', team: 'randomCAP1v1', teamLength: { battle: 1, }, ruleset: ['Species Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Dynamax Clause'], }, { name: "[Gen 7] Random Battle", desc: `Randomized teams of level-balanced Pokémon with sets that are generated to be competitively viable.`, threads: [ `• Sets and Suggestions`, `• Role Compendium`, ], mod: 'gen7', team: 'random', ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 7] Random Doubles Battle", threads: [`• Sets and Suggestions`], mod: 'gen7', gameType: 'doubles', team: 'random', searchShow: false, ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 7] Battle Factory", desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`, mod: 'gen7', team: 'randomFactory', ruleset: ['Obtainable', 'Sleep Clause Mod', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Mega Rayquaza Clause'], }, { name: "[Gen 7] BSS Factory", desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Spot Singles.`, threads: [ `• Information and Suggestions Thread`, ], mod: 'gen7', team: 'randomBSSFactory', searchShow: false, teamLength: { validate: [3, 6], battle: 3, }, ruleset: ['Obtainable', 'Standard GBU'], }, { name: "[Gen 7] Hackmons Cup", desc: `Randomized teams of level-balanced Pokémon with absolutely any ability, moves, and item.`, mod: 'gen7', team: 'randomHC', searchShow: false, ruleset: ['HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 7] Super Staff Bros Brawl", desc: "Super Staff Bros returns for another round! Battle with a random team of pokemon created by the sim staff.", threads: [ `• Introduction & Roster`, ], mod: 'ssb', team: 'randomStaffBros', ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], onBegin() { this.add('raw|SUPER STAFF BROS BRAWL!!'); this.add('message', 'GET READY FOR THE NEXT BATTLE!'); if (this.teamGenerator.allXfix) this.add(`c|~HoeenHero|Oops I dropped my bag of xfix sets sorry!`); this.add(`raw|
Wondering what all these custom moves, abilities, and items do?
Check out the Super Staff Bros Brawl Guide and find out!
`); }, onSwitchInPriority: 100, onSwitchIn(pokemon) { let name: string = this.toID(pokemon.illusion ? pokemon.illusion.name : pokemon.name); if (this.dex.getSpecies(name).exists || name === 'rage') { // Certain pokemon have volatiles named after their id // To prevent overwriting those, and to prevent accidentaly leaking // that a pokemon is on a team through the onStart even triggering // at the start of a match, users with pokemon names will need their // statuses to end in "user". name = name + 'user'; } // Add the mon's status effect to it as a volatile. const status = this.dex.getEffect(name); if (status?.exists) { pokemon.addVolatile(name, pokemon); } }, }, { name: "[Gen 7 Let's Go] Random Battle", mod: 'letsgo', team: 'random', searchShow: false, ruleset: ['Obtainable', 'Allow AVs', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], }, { name: "[Gen 6] Random Battle", mod: 'gen6', team: 'random', ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 6] Battle Factory", desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`, mod: 'gen6', team: 'randomFactory', searchShow: false, ruleset: ['Obtainable', 'Sleep Clause Mod', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Mega Rayquaza Clause'], }, { name: "[Gen 5] Random Battle", mod: 'gen5', team: 'random', ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 4] Random Battle", mod: 'gen4', team: 'random', ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 3] Random Battle", mod: 'gen3', team: 'random', ruleset: ['Standard'], }, { name: "[Gen 2] Random Battle", mod: 'gen2', team: 'random', ruleset: ['Standard'], }, { name: "[Gen 1] Random Battle", mod: 'gen1', team: 'random', ruleset: ['Standard'], }, { name: "[Gen 1] Challenge Cup", mod: 'gen1', team: 'randomCC', searchShow: false, challengeShow: false, ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'], }, // RoA Spotlight /////////////////////////////////////////////////////////////////// { section: "RoA Spotlight", column: 3, }, { name: "[Gen 5] Ubers", threads: [ `• BW2 Ubers`, ], mod: 'gen5', // searchShow: false, ruleset: ['Standard', '!Evasion Moves Clause', 'Sleep Clause Mod'], }, { name: "[Gen 6] Monotype", desc: `All the Pokémon on a team must share a type.`, threads: [ `• ORAS Monotype`, ], mod: 'gen6', // searchShow: false, ruleset: ['Standard', 'Swagger Clause', 'Same Type Clause'], banlist: [ 'Aegislash', 'Altaria-Mega', 'Arceus', 'Blaziken', 'Charizard-Mega-X', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Gengar-Mega', 'Giratina', 'Greninja', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye-Mega', 'Salamence-Mega', 'Shaymin-Sky', 'Slowbro-Mega', 'Talonflame', 'Xerneas', 'Yveltal', 'Zekrom', 'Shadow Tag', 'Damp Rock', 'Smooth Rock', 'Soul Dew', 'Baton Pass', ], }, { name: "[Gen 2] PU", threads: [ `• GSC PU`, ], mod: 'gen2', ruleset: ['[Gen 2] NU'], banlist: [ 'Arbok', 'Azumarill', 'Chinchou', 'Dewgong', 'Dragonair', 'Dugtrio', 'Dunsparce', 'Exeggcute', 'Farfetch\u2019d', 'Fearow', 'Flareon', 'Gloom', 'Graveler', 'Hitmonlee', 'Houndour', 'Kingler', 'Ledian', 'Lickitung', 'Magmar', 'Magnemite', 'Ninetales', 'Octillery', 'Persian', 'Pidgeot', 'Pineco', 'Porygon', 'Primeape', 'Pupitar', 'Rapidash', 'Raticate', 'Shuckle', 'Sneasel', 'Stantler', 'Sudowoodo', 'Weezing', 'Wigglytuff', 'Xatu', ], }, // Past Gens OU /////////////////////////////////////////////////////////////////// { section: "Past Gens OU", column: 3, }, { name: "[Gen 7] OU", threads: [ `• USM OU Banlist`, `• USM OU Sample Teams`, `• USM OU Viability Rankings`, ], mod: 'gen7', ruleset: ['Standard'], banlist: ['Uber', 'Arena Trap', 'Power Construct', 'Shadow Tag', 'Baton Pass'], }, { name: "[Gen 6] OU", threads: [ `• ORAS OU Banlist`, `• ORAS OU Sample Teams`, `• ORAS OU Viability Rankings`, ], mod: 'gen6', ruleset: ['Standard', 'Swagger Clause'], banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'Soul Dew', 'Baton Pass'], }, { name: "[Gen 5] OU", threads: [ `• BW2 Sample Teams`, `• BW2 OU Viability Rankings`, ], mod: 'gen5', ruleset: ['Standard', 'Evasion Abilities Clause', 'Baton Pass Clause', 'Sleep Moves Clause', 'Swagger Clause'], banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'Soul Dew'], }, { name: "[Gen 4] OU", threads: [ `• DPP OU Metagame Discussion`, `• DPP Sample Teams`, `• DPP OU Viability Rankings`, ], mod: 'gen4', ruleset: ['Standard'], banlist: ['AG', 'Uber', 'Sand Veil', 'Soul Dew', 'Swinub + Snow Cloak', 'Piloswine + Snow Cloak', 'Mamoswine + Snow Cloak', 'Baton Pass'], }, { name: "[Gen 3] OU", threads: [ `• ADV Sample Teams`, `• ADV OU Viability Rankings`, ], mod: 'gen3', ruleset: ['Standard', '3 Baton Pass Clause'], banlist: ['Uber', 'Smeargle + Baton Pass'], }, { name: "[Gen 2] OU", threads: [ `• GSC Sample Teams`, `• GSC OU Viability Rankings`, ], mod: 'gen2', ruleset: ['Standard'], banlist: ['Uber'], }, { name: "[Gen 1] OU", threads: [ `• RBY Sample Teams`, `• RBY OU Viability Rankings`, ], mod: 'gen1', ruleset: ['Standard'], banlist: ['Uber'], }, // US/UM Singles /////////////////////////////////////////////////////////////////// { section: "US/UM Singles", column: 3, }, { name: "[Gen 7] Ubers", threads: [ `• USM Ubers`, ], mod: 'gen7', // searchShow: false, ruleset: ['Standard', 'Mega Rayquaza Clause'], banlist: ['Baton Pass'], }, { name: "[Gen 7] UU", threads: [ `• USM UU Sample Teams`, `• USM UU Viability Rankings`, ], mod: 'gen7', // searchShow: false, ruleset: ['[Gen 7] OU'], banlist: ['OU', 'UUBL', 'Drizzle', 'Drought', 'Kommonium Z', 'Mewnium Z'], }, { name: "[Gen 7] RU", threads: [ `• USM RU Sample Teams`, `• USM RU Viability Rankings`, ], mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] UU'], banlist: ['UU', 'RUBL', 'Mimikyu', 'Aurora Veil'], unbanlist: ['Drought'], }, { name: "[Gen 7] NU", threads: [ `• USM NU Sample Teams`, `• USM NU Viability Rankings`, ], mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] RU'], banlist: ['RU', 'NUBL', 'Drought'], }, { name: "[Gen 7] PU", threads: [ `• USM PU Sample Teams`, `• USM PU Viability Rankings`, ], mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] NU'], banlist: ['NU', 'PUBL'], }, { name: "[Gen 7] LC", threads: [ `• USM LC Banlist`, `• USM LC Sample Teams`, `• USM LC Viability Rankings`, ], mod: 'gen7', searchShow: false, maxLevel: 5, ruleset: ['Little Cup', 'Standard', 'Swagger Clause'], banlist: [ 'Aipom', 'Cutiefly', 'Drifloon', 'Gligar', 'Gothita', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Trapinch', 'Vulpix-Base', 'Wingull', 'Yanma', 'Eevium Z', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', ], }, { name: "[Gen 7] Monotype", desc: `All the Pokémon on a team must share a type.`, threads: [ `• USM Monotype`, ], mod: 'gen7', // searchShow: false, ruleset: ['Same Type Clause', 'Standard', 'Swagger Clause'], banlist: [ 'Aegislash', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Gengar-Mega', 'Giratina', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kartana', 'Kyogre', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Tapu Lele', 'Xerneas', 'Yveltal', 'Zekrom', 'Zygarde', 'Battle Bond', 'Shadow Tag', 'Damp Rock', 'Smooth Rock', 'Terrain Extender', 'Baton Pass', ], }, { name: "[Gen 7] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, threads: [ `• USUM 1v1`, ], mod: 'gen7', searchShow: false, teamLength: { validate: [1, 3], battle: 1, }, ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Swagger Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'], banlist: [ 'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom', 'Focus Sash', 'Moody', 'Perish Song', 'Detect + Fightinium Z', ], }, { name: "[Gen 7] Anything Goes", threads: [ `• Anything Goes Metagame Discussion`, `• Anything Goes Viability Rankings`, `• Anything Goes Sample Teams`, ], mod: 'gen7', // searchShow: false, ruleset: ['Obtainable', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'], }, { name: "[Gen 7] ZU", desc: `The unofficial usage-based tier below PU.`, threads: [ `• ZU Metagame Discussion`, `• ZU Viability Rankings`, `• ZU Sample Teams`, ], mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] PU'], banlist: [ 'PU', 'Carracosta', 'Crabominable', 'Gorebyss', 'Jynx', 'Raticate-Alola', 'Shiftry', 'Throh', 'Turtonator', 'Type: Null', 'Ursaring', 'Victreebel', ], }, { name: "[Gen 7] CAP", threads: [ `• CAP Metagame Discussion`, `• CAP Viability Rankings`, `• CAP Sample Teams`, ], mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] OU', '+CAP'], }, { name: "[Gen 7] Battle Spot Singles", threads: [ `• Introduction to Battle Spot Singles`, `• Battle Spot Singles Viability Rankings`, `• Battle Spot Singles Role Compendium`, `• Battle Spot Singles Sample Teams`, ], mod: 'gen7', searchShow: false, maxForcedLevel: 50, teamLength: { validate: [3, 6], battle: 3, }, ruleset: ['Standard GBU'], minSourceGen: 6, }, { name: "[Gen 7 Let's Go] OU", threads: [ `• LGPE OU Metagame Discussion`, `• LGPE OU Viability Rankings`, ], mod: 'letsgo', searchShow: false, forcedLevel: 50, ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], banlist: ['Uber'], }, { name: "[Gen 7] Custom Game", mod: 'gen7', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, teamLength: { validate: [1, 24], battle: 24, }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, // US/UM Doubles /////////////////////////////////////////////////////////////////// { section: "US/UM Doubles", column: 3, }, { name: "[Gen 7] Doubles OU", threads: [ `• USUM Doubles OU Metagame Discussion`, `• USUM Doubles OU Viability Rankings`, `• USUM Doubles OU Sample Teams`, ], mod: 'gen7', gameType: 'doubles', // searchShow: false, ruleset: ['Standard Doubles', 'Swagger Clause'], banlist: ['DUber', 'Power Construct', 'Eevium Z', 'Dark Void'], }, { name: "[Gen 7] Doubles UU", threads: [`• Doubles UU Metagame Discussion`], mod: 'gen7', gameType: 'doubles', searchShow: false, ruleset: ['[Gen 7] Doubles OU'], banlist: ['DOU', 'DBL'], }, { name: "[Gen 7] VGC 2019", threads: [ `• VGC 2019 Discussion`, `• VGC 2019 Viability Rankings`, ], mod: 'gen7', gameType: 'doubles', searchShow: false, forcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, ruleset: ['Minimal GBU', 'VGC Timer'], banlist: ['Unown'], minSourceGen: 7, onValidateTeam(team) { const legends = [ 'Mewtwo', 'Lugia', 'Ho-Oh', 'Kyogre', 'Groudon', 'Rayquaza', 'Dialga', 'Palkia', 'Giratina', 'Reshiram', 'Zekrom', 'Kyurem', 'Xerneas', 'Yveltal', 'Zygarde', 'Cosmog', 'Cosmoem', 'Solgaleo', 'Lunala', 'Necrozma', ]; let n = 0; for (const set of team) { const baseSpecies = this.dex.getSpecies(set.species).baseSpecies; if (legends.includes(baseSpecies)) n++; if (n > 2) return [`You can only use up to two legendary Pok\u00E9mon.`]; } }, }, { name: "[Gen 7] VGC 2018", threads: [ `• VGC 2018 Discussion`, `• VGC 2018 Viability Rankings`, `• VGC 2018 Sample Teams`, ], mod: 'gen7', gameType: 'doubles', searchShow: false, forcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, timer: { starting: 5 * 60, addPerTurn: 0, maxPerTurn: 55, maxFirstTurn: 90, grace: 90, timeoutAutoChoose: true, dcTimerBank: false, }, ruleset: ['Standard GBU'], banlist: ['Oranguru + Symbiosis', 'Passimian + Defiant', 'Unown', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry'], minSourceGen: 7, }, { name: "[Gen 7] VGC 2017", threads: [ `• VGC 2017 Discussion`, `• VGC 2017 Viability Rankings`, `• VGC 2017 Sample Teams`, ], mod: 'vgc17', gameType: 'doubles', searchShow: false, forcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, timer: { starting: 15 * 60, addPerTurn: 0, maxPerTurn: 55, maxFirstTurn: 90, grace: 90, timeoutAutoChoose: true, dcTimerBank: false, }, ruleset: ['Obtainable', 'Alola Pokedex', 'Species Clause', 'Nickname Clause', 'Item Clause', 'Team Preview', 'Cancel Mod'], banlist: [ 'Solgaleo', 'Lunala', 'Necrozma', 'Magearna', 'Marshadow', 'Zygarde', 'Mega', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry', ], minSourceGen: 7, }, { name: "[Gen 7] Battle Spot Doubles", threads: [ `• Battle Spot Doubles Discussion`, `• Battle Spot Doubles Viability Rankings`, `• Battle Spot Doubles Sample Teams`, ], mod: 'gen7', gameType: 'doubles', searchShow: false, maxForcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, ruleset: ['Standard GBU'], minSourceGen: 6, }, { name: "[Gen 7] Doubles Custom Game", mod: 'gen7', gameType: 'doubles', searchShow: false, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, debug: true, teamLength: { validate: [2, 24], battle: 24, }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, // OR/AS Singles /////////////////////////////////////////////////////////////////// { section: "OR/AS Singles", column: 4, }, { name: "[Gen 6] Ubers", threads: [ `• ORAS Ubers`, ], mod: 'gen6', searchShow: false, ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'], }, { name: "[Gen 6] UU", threads: [ `• ORAS UU Banlist`, `• ORAS UU Viability Rankings`, ], mod: 'gen6', searchShow: false, ruleset: ['[Gen 6] OU'], banlist: ['OU', 'UUBL', 'Drizzle', 'Drought'], }, { name: "[Gen 6] RU", threads: [ `• ORAS RU Banlist`, `• ORAS RU Viability Rankings`, ], mod: 'gen6', searchShow: false, ruleset: ['[Gen 6] UU'], banlist: ['UU', 'RUBL'], }, { name: "[Gen 6] NU", threads: [ `• ORAS NU Banlist`, `• ORAS NU Viability Rankings`, ], mod: 'gen6', searchShow: false, ruleset: ['[Gen 6] RU'], banlist: ['RU', 'NUBL'], }, { name: "[Gen 6] PU", threads: [ `• ORAS PU Banlist`, `• ORAS PU Viability Rankings`, ], mod: 'gen6', searchShow: false, ruleset: ['[Gen 6] NU'], banlist: ['NU', 'PUBL', 'Chatter'], }, { name: "[Gen 6] LC", threads: [ `• ORAS LC Banlist`, `• ORAS LC Viability Rankings`, ], mod: 'gen6', searchShow: false, maxLevel: 5, ruleset: ['Standard', 'Little Cup'], banlist: [ 'Drifloon', 'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Yanma', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger', ], }, { name: "[Gen 6] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, threads: [ `• ORAS 1v1`, ], mod: 'gen6', searchShow: false, teamLength: { validate: [1, 3], battle: 1, }, ruleset: ['Obtainable', 'Nickname Clause', 'Moody Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Swagger Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], banlist: [ 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Xerneas', 'Yveltal', 'Zekrom', 'Focus Sash', 'Soul Dew', 'Perish Song', ], }, { name: "[Gen 6] Anything Goes", threads: [ `• ORAS Anything Goes`, `• ORAS AG Resources`, ], mod: 'gen6', searchShow: false, ruleset: ['Obtainable', 'Team Preview', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 6] CAP", threads: [ `• ORAS CAP Metagame Discussion`, `• ORAS CAP Sample Teams`, `• ORAS CAP Viability Rankings`, ], mod: 'gen6', searchShow: false, ruleset: ['[Gen 6] OU', '+CAP'], }, { name: "[Gen 6] Battle Spot Singles", threads: [ `• ORAS Battle Spot Singles`, `• ORAS BSS Viability Rankings`, ], mod: 'gen6', searchShow: false, maxForcedLevel: 50, teamLength: { validate: [3, 6], battle: 3, }, ruleset: ['Obtainable', 'Standard GBU'], minSourceGen: 6, }, { name: "[Gen 6] Custom Game", mod: 'gen6', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, teamLength: { validate: [1, 24], battle: 24, }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, // OR/AS Doubles/Triples /////////////////////////////////////////////////////////////////// { section: "OR/AS Doubles/Triples", column: 4, }, { name: "[Gen 6] Doubles OU", threads: [ `• ORAS Doubles OU Discussion`, `• ORAS Doubles OU Viability Rankings`, `• ORAS Doubles OU Sample Teams`, ], mod: 'gen6', gameType: 'doubles', searchShow: false, ruleset: ['Standard Doubles', 'Swagger Clause'], banlist: ['DUber', 'Soul Dew', 'Dark Void'], }, { name: "[Gen 6] VGC 2016", threads: [ `• VGC 2016 Rules`, `• VGC 2016 Viability Rankings`, ], mod: 'gen6', gameType: 'doubles', searchShow: false, maxForcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'Item Clause', 'Team Preview', 'Cancel Mod'], banlist: [ 'Mew', 'Celebi', 'Jirachi', 'Deoxys', 'Phione', 'Manaphy', 'Darkrai', 'Shaymin', 'Arceus', 'Victini', 'Keldeo', 'Meloetta', 'Genesect', 'Diancie', 'Hoopa', 'Volcanion', 'Soul Dew', ], minSourceGen: 6, onValidateTeam(team) { const legends = [ 'Mewtwo', 'Lugia', 'Ho-Oh', 'Kyogre', 'Groudon', 'Rayquaza', 'Dialga', 'Palkia', 'Giratina', 'Reshiram', 'Zekrom', 'Kyurem', 'Xerneas', 'Yveltal', 'Zygarde', ]; let n = 0; for (const set of team) { const baseSpecies = this.dex.getSpecies(set.species).baseSpecies; if (legends.includes(baseSpecies)) n++; if (n > 2) return ["You can only use up to two legendary Pok\u00E9mon."]; } }, }, { name: "[Gen 6] Battle Spot Doubles", threads: [ `• ORAS Battle Spot Doubles Discussion`, `• ORAS BSD Viability Rankings`, ], mod: 'gen6', gameType: 'doubles', searchShow: false, maxForcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, ruleset: ['Standard GBU'], minSourceGen: 6, }, { name: "[Gen 6] Doubles Custom Game", mod: 'gen6', gameType: 'doubles', searchShow: false, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, debug: true, teamLength: { validate: [1, 24], battle: 24, }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, { name: "[Gen 6] Battle Spot Triples", threads: [ `• ORAS Battle Spot Triples Discussion`, `• ORAS BST Viability Rankings`, ], mod: 'gen6', gameType: 'triples', searchShow: false, maxForcedLevel: 50, teamLength: { validate: [6, 6], }, ruleset: ['Standard GBU'], minSourceGen: 6, }, { name: "[Gen 6] Triples Custom Game", mod: 'gen6', gameType: 'triples', searchShow: false, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, debug: true, teamLength: { validate: [1, 24], battle: 24, }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, // B2/W2 Singles /////////////////////////////////////////////////////////////////// { section: "B2/W2 Singles", column: 4, }, { name: "[Gen 5] UU", threads: [ `• BW2 UU Viability Rankings`, `• BW2 Sample Teams`, ], mod: 'gen5', searchShow: false, ruleset: ['Standard', 'Evasion Abilities Clause', 'Baton Pass Clause', 'Swagger Clause', 'Sleep Clause Mod'], banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning'], }, { name: "[Gen 5] RU", threads: [ `• BW2 Sample Teams`, `• BW2 RU Viability Rankings`, ], mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] UU'], banlist: ['UU', 'RUBL', 'Shell Smash + Baton Pass'], }, { name: "[Gen 5] NU", threads: [ `• BW2 Sample Teams`, `• BW2 NU Viability Rankings`, ], mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] RU'], banlist: ['RU', 'NUBL', 'Prankster + Assist'], }, { name: "[Gen 5] PU", threads: [ `• BW2 PU`, ], mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] NU'], banlist: ['NU', 'Combusken', 'Linoone', 'Riolu', 'Rotom-Frost', 'Vigoroth'], }, { name: "[Gen 5] LC", threads: [ `• BW2 Sample Teams`, `• BW2 LC Viability Rankings`, ], mod: 'gen5', searchShow: false, maxLevel: 5, ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'], banlist: [ 'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Sand Rush', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger', ], }, { name: "[Gen 5] Monotype", desc: `All the Pokémon on a team must share a type.`, threads: [ `• BW2 Monotype`, ], mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] OU', 'Same Type Clause'], }, { name: "[Gen 5] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, threads: [ `• BW2 1v1`, ], mod: 'gen5', searchShow: false, teamLength: { validate: [1, 3], battle: 1, }, ruleset: ['Standard', 'Baton Pass Clause', 'Swagger Clause'], banlist: ['Uber', 'Cottonee', 'Whimsicott', 'Focus Sash', 'Soul Dew', 'Perish Song'], unbanlist: ['Genesect', 'Landorus', 'Manaphy', 'Thundurus', 'Tornadus-Therian'], }, { name: "[Gen 5] GBU Singles", mod: 'gen5', searchShow: false, maxForcedLevel: 50, teamLength: { validate: [3, 6], battle: 3, }, ruleset: ['Standard GBU'], banlist: ['Dark Void', 'Sky Drop'], }, { name: "[Gen 5] Custom Game", mod: 'gen5', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, teamLength: { validate: [1, 24], battle: 24, }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, // B2/W2 Doubles /////////////////////////////////////////////////////////////////// { section: 'B2/W2 Doubles', column: 4, }, { name: "[Gen 5] Doubles OU", threads: [ `• BW2 Doubles Metagame Discussion`, `• BW2 Doubles Viability Rankings`, `• BW2 Doubles Sample Teams`, ], mod: 'gen5', gameType: 'doubles', searchShow: false, ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'], banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Gravity'], }, { name: "[Gen 5] GBU Doubles", mod: 'gen5', gameType: 'doubles', searchShow: false, maxForcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, ruleset: ['Standard GBU'], banlist: ['Dark Void', 'Sky Drop'], }, { name: "[Gen 5] Doubles Custom Game", mod: 'gen5', gameType: 'doubles', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, teamLength: { validate: [1, 24], battle: 24, }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, { name: "[Gen 5] Triples Custom Game", mod: 'gen5', gameType: 'triples', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, // DPP Singles /////////////////////////////////////////////////////////////////// { section: "DPP Singles", column: 5, }, { name: "[Gen 4] Ubers", threads: [ `• DPP Ubers`, ], mod: 'gen4', searchShow: false, ruleset: ['Standard'], banlist: ['AG'], }, { name: "[Gen 4] UU", threads: [ `• DPP UU Metagame Discussion`, `• DPP UU Viability Rankings`, ], mod: 'gen4', searchShow: false, ruleset: ['[Gen 4] OU', 'Baton Pass Clause'], banlist: ['OU', 'UUBL'], unbanlist: ['Sand Veil', 'Baton Pass'], }, { name: "[Gen 4] NU", threads: [ `• DPP NU Metagame Discussion`, `• DPP NU Viability Rankings`, ], mod: 'gen4', searchShow: false, ruleset: ['[Gen 4] UU'], banlist: ['UU', 'NUBL'], }, { name: "[Gen 4] PU", threads: [ `• DPP PU`, ], mod: 'gen4', searchShow: false, ruleset: ['[Gen 4] NU'], banlist: [ 'Articuno', 'Cacturne', 'Charizard', 'Cradily', 'Dodrio', 'Drifblim', 'Dusclops', 'Electrode', 'Floatzel', 'Gardevoir', 'Gligar', 'Golem', 'Grumpig', 'Haunter', 'Hitmonchan', 'Hypno', 'Jumpluff', 'Jynx', 'Lickilicky', 'Linoone', 'Magmortar', 'Magneton', 'Manectric', 'Medicham', 'Meganium', 'Nidoqueen', 'Ninetales', 'Piloswine', 'Poliwrath', 'Porygon2', 'Regice', 'Regirock', 'Roselia', 'Sandslash', 'Sharpedo', 'Shiftry', 'Skuntank', 'Slowking', 'Tauros', 'Typhlosion', 'Venomoth', 'Vileplume', ], }, { name: "[Gen 4] LC", threads: [ `• DPP LC Guide`, `• DPP LC Viability Rankings`, ], mod: 'gen4', searchShow: false, maxLevel: 5, ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'], banlist: [ 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma', 'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Sonic Boom', ], }, { name: "[Gen 4] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, threads: [ `• DPP 1v1`, ], mod: 'gen4', searchShow: false, teamLength: { validate: [1, 3], battle: 1, }, ruleset: ['[Gen 4] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview'], banlist: ['Latias', 'Porygon-Z', 'Snorlax', 'Focus Sash', 'Destiny Bond', 'Explosion', 'Perish Song', 'Self-Destruct'], unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil'], }, { name: "[Gen 4] Anything Goes", mod: 'gen4', searchShow: false, ruleset: ['Obtainable', 'Arceus EV Limit', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 4] Custom Game", mod: 'gen4', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, teamLength: { validate: [1, 24], battle: 24, }, // no restrictions ruleset: ['Cancel Mod'], }, // DPP Doubles /////////////////////////////////////////////////////////////////// { section: "DPP Doubles", column: 5, }, { name: "[Gen 4] Doubles OU", threads: [`• DPP Doubles`], mod: 'gen4', gameType: 'doubles', searchShow: false, ruleset: ['[Gen 4] OU'], banlist: ['Explosion'], unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut'], }, { name: "[Gen 4] Doubles Custom Game", mod: 'gen4', gameType: 'doubles', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, teamLength: { validate: [1, 24], battle: 24, }, // no restrictions ruleset: ['Cancel Mod'], }, // Past Generations /////////////////////////////////////////////////////////////////// { section: "Past Generations", column: 5, }, { name: "[Gen 3] Ubers", threads: [ `• ADV Ubers`, ], mod: 'gen3', searchShow: false, ruleset: ['Standard'], banlist: ['Wobbuffet + Leftovers'], }, { name: "[Gen 3] UU", threads: [ `• ADV UU Metagame Discussion`, `• ADV UU Viability Rankings`, ], mod: 'gen3', searchShow: false, ruleset: ['Standard', 'NFE Clause'], banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain'], unbanlist: ['Scyther'], }, { name: "[Gen 3] NU", threads: [ `• ADV NU Viability Rankings`, ], mod: 'gen3', searchShow: false, ruleset: ['[Gen 3] UU', '!NFE Clause'], banlist: ['UU'], }, { name: "[Gen 3] 1v1", desc: `Bring three Pokémon to Team Preview and choose one to battle.`, threads: [ `• ADV 1v1`, ], mod: 'gen3', searchShow: false, teamLength: { validate: [1, 3], battle: 1, }, ruleset: ['[Gen 3] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview'], banlist: ['Slaking', 'Snorlax', 'Suicune', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song', 'Self-Destruct'], }, { name: "[Gen 3] Custom Game", mod: 'gen3', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, teamLength: { validate: [1, 24], battle: 24, }, ruleset: ['HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 3] Doubles Custom Game", mod: 'gen3', gameType: 'doubles', searchShow: false, debug: true, teamLength: { validate: [1, 24], battle: 24, }, ruleset: ['HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 2] Ubers", threads: [ `• GSC Ubers`, ], mod: 'gen2', searchShow: false, ruleset: ['Standard'], }, { name: "[Gen 2] UU", threads: [`• GSC UU`], mod: 'gen2', searchShow: false, ruleset: ['[Gen 2] OU'], banlist: ['OU', 'UUBL'], }, { name: "[Gen 2] NU", threads: [`• GSC NU`], mod: 'gen2', searchShow: false, ruleset: ['[Gen 2] UU'], banlist: ['UU', 'NUBL'], }, { name: "[Gen 2] Custom Game", mod: 'gen2', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, teamLength: { validate: [1, 24], battle: 24, }, ruleset: ['HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 1] Ubers", threads: [ `• RBY Ubers`, ], mod: 'gen1', searchShow: false, ruleset: ['Standard'], }, { name: "[Gen 1] UU", threads: [ `• RBY UU Metagame Discussion`, `• RBY UU Viability Rankings`, ], mod: 'gen1', searchShow: false, ruleset: ['[Gen 1] OU'], banlist: ['OU', 'UUBL'], }, { name: "[Gen 1] OU (Tradeback)", desc: `RBY OU with movepool additions from the Time Capsule.`, threads: [ `• RBY Tradebacks OU`, ], mod: 'gen1', searchShow: false, ruleset: ['Obtainable', 'Allow Tradeback', 'Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'OHKO Clause', 'Evasion Moves Clause', 'HP Percentage Mod', 'Cancel Mod'], banlist: ['Uber', 'Nidoking + Fury Attack + Thrash', 'Exeggutor + Poison Powder + Stomp', 'Exeggutor + Sleep Powder + Stomp', 'Exeggutor + Stun Spore + Stomp', 'Jolteon + Focus Energy + Thunder Shock', 'Flareon + Focus Energy + Ember', ], }, { name: "[Gen 1] Stadium OU", mod: 'stadium', searchShow: false, ruleset: ['Standard', 'Team Preview', '!Sleep Clause Mod', 'Stadium Sleep Clause'], banlist: ['Uber', 'Nidoking + Fury Attack + Thrash', 'Exeggutor + Poison Powder + Stomp', 'Exeggutor + Sleep Powder + Stomp', 'Exeggutor + Stun Spore + Stomp', 'Jolteon + Focus Energy + Thunder Shock', 'Flareon + Focus Energy + Ember', ], }, { name: "[Gen 1] Custom Game", mod: 'gen1', searchShow: false, debug: true, maxLevel: 9999, battle: {trunc: Math.trunc}, defaultLevel: 100, teamLength: { validate: [1, 24], battle: 24, }, ruleset: ['HP Percentage Mod', 'Cancel Mod'], }, ];