diff --git a/PROTOCOL.md b/PROTOCOL.md index 2d44c2136b..695a8ec631 100644 --- a/PROTOCOL.md +++ b/PROTOCOL.md @@ -7,9 +7,9 @@ Pokémon Showdown is implemented in SockJS. SockJS is a compatibility layer over raw WebSocket, so you can actually connect to Pokémon Showdown directly using WebSocket: - ws://sim.smogon.com:8000/showdown/websocket - or wss://sim3.psim.us/showdown/websocket + or + ws://sim3.psim.us:8000/showdown/websocket Client implementations you might want to look at for reference include: diff --git a/config/formats.ts b/config/formats.ts index b2fb884b51..9f19fef408 100644 --- a/config/formats.ts +++ b/config/formats.ts @@ -238,16 +238,10 @@ export const Formats: import('../sim/dex-formats').FormatList = [ mod: 'gen9', gameType: 'doubles', + searchShow: false, bestOfDefault: true, ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Open Team Sheets'], }, - { - name: "[Gen 9] VGC 2026 Reg F (Bo3)", - - mod: 'gen9', - gameType: 'doubles', - ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Force Open Team Sheets', 'Best of = 3'], - }, { name: "[Gen 9] VGC 2026 Reg I", // Change back to 2025 after removing the ladder mod: 'gen9', @@ -274,7 +268,50 @@ export const Formats: import('../sim/dex-formats').FormatList = [ ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'], }, - // S/V Doubles + // Champions + /////////////////////////////////////////////////////////////////// + + { + section: "Champions", + }, + { + name: "[Gen 9 Champions] OU", + mod: 'champions', + ruleset: ['Standard'], + banlist: ['AG', 'Uber', 'Moody', 'Baton Pass', 'Last Respects', 'Shed Tail'], + }, + { + name: "[Gen 9 Champions] BSS Reg M-A", + mod: 'champions', + bestOfDefault: true, + ruleset: ['Flat Rules', 'VGC Timer'], + }, + { + name: "[Gen 9 Champions] VGC 2026 Reg M-A", + mod: 'champions', + gameType: 'doubles', + bestOfDefault: true, + ruleset: ['Flat Rules', 'VGC Timer', 'Open Team Sheets'], + }, + { + name: "[Gen 9 Champions] VGC 2026 Reg M-A (Bo3)", + mod: 'champions', + gameType: 'doubles', + ruleset: ['Flat Rules', 'VGC Timer', 'Force Open Team Sheets', 'Best of = 3'], + }, + { + name: "[Gen 9 Champions] Custom Game", + mod: 'champions', + searchShow: false, + debug: true, + battle: { trunc: Math.trunc }, + ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 50'], + onBegin() { + this.reportPercentages = true; + }, + }, + + // Unofficial Metagames /////////////////////////////////////////////////////////////////// { @@ -313,6 +350,21 @@ export const Formats: import('../sim/dex-formats').FormatList = [ 'Zekrom', 'Commander', 'Moody', 'Focus Sash', 'King\'s Rock', 'Razor Fang', 'Ally Switch', 'Final Gambit', 'Perish Song', 'Swagger', ], }, + { + name: "[Gen 9] 4v4 Doubles UU", + desc: "VGC rules, but only Pokémon that get less than 4.52% usage on the VGC ladder are legal, as well as a few other guidelines.", + mod: 'gen9', + gameType: 'doubles', + searchShow: false, + bestOfDefault: true, + ruleset: ['[Gen 9] VGC 2026 Reg F', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'OHKO Clause'], + banlist: [ + 'Amoonguss', 'Annihilape', 'Arcanine-Hisui', 'Basculegion-M', 'Chi-Yu', 'Chien-Pao', 'Cresselia', 'Dondozo', 'Dragonite', 'Enamorus-Incarnate', 'Farigiraf', 'Flutter Mane', + 'Gholdengo', 'Gouging Fire', 'Incineroar', 'Indeedee-F', 'Iron Crown', 'Landorus-Incarnate', 'Landorus-Therian', 'Ogerpon-Cornerstone', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', + 'Porygon2', 'Raging Bolt', 'Regidrago', 'Rillaboom', 'Roaring Moon', 'Sneasler', 'Ting-Lu', 'Torkoal', 'Tornadus-Incarnate', 'Ursaluna-Base', 'Urshifu-Single-Strike', + 'Urshifu-Rapid-Strike', 'Whimsicott', 'Commander', 'Bright Powder', 'King\'s Rock', 'Razor Fang', + ], + }, { name: "[Gen 9] Anything Goes", mod: 'gen9', @@ -330,7 +382,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [ gameType: 'freeforall', rated: false, tournamentShow: false, - ruleset: ['Standard', 'Sleep Moves Clause', '!Sleep Clause Mod', '!Evasion Items Clause'], + ruleset: ['Standard', 'Sleep Moves Clause', '!Sleep Clause Mod', '!Evasion Items Clause', '!Species Clause'], banlist: [ 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dondozo', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-White', @@ -347,8 +399,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [ searchShow: false, ruleset: ['[Gen 9] LC'], banlist: [ - 'Chinchou', 'Diglett-Alola', 'Drifloon', 'Elekid', 'Foongus', 'Glimmet', 'Gothita', 'Grookey', 'Growlithe-Hisui', 'Koffing', 'Mareanie', 'Mienfoo', 'Mudbray', - 'Pawniard', 'Sandshrew-Alola', 'Shellos', 'Snover', 'Stunky', 'Timburr', 'Tinkatink', 'Toedscool', 'Trapinch', 'Vullaby', 'Wingull', 'Zorua-Hisui', + 'Chinchou', 'Diglett-Alola', 'Drifloon', 'Elekid', 'Foongus', 'Glimmet', 'Gothita', 'Grookey', 'Growlithe-Hisui', 'Impidimp', 'Koffing', 'Mareanie', 'Mienfoo', 'Mudbray', 'Larvesta', + 'Pawniard', 'Sandshrew-Alola', 'Shellos', 'Stunky', 'Tentacool', 'Tinkatink', 'Toedscool', 'Trapinch', 'Vullaby', 'Wingull', 'Zorua-Hisui', // LC UUBL 'Deerling', 'Minccino', 'Light Clay', ], @@ -360,9 +412,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [ searchShow: false, ruleset: ['Standard OMs', 'Not Fully Evolved', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ - 'Basculin-White-Striped', 'Bisharp', 'Chansey', 'Combusken', 'Dipplin', 'Duraludon', 'Electabuzz', 'Gligar', 'Gurdurr', - 'Haunter', 'Magmar', 'Magneton', 'Misdreavus', 'Porygon2', 'Primeape', 'Qwilfish-Hisui', 'Rhydon', 'Scyther', 'Sneasel', - 'Sneasel-Hisui', 'Ursaring', 'Vigoroth', 'Vulpix-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Baton Pass', + 'Basculin-White-Striped', 'Bisharp', 'Chansey', 'Combusken', 'Dipplin', 'Duraludon', 'Dusclops', 'Electabuzz', 'Gligar', 'Gurdurr', + 'Haunter', 'Magmar', 'Magneton', 'Misdreavus', 'Porygon2', 'Primeape', 'Qwilfish-Hisui', 'Rhydon', 'Scyther', 'Sneasel', 'Sneasel-Hisui', + 'Ursaring', 'Vigoroth', 'Vulpix-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Baton Pass', ], }, { @@ -372,12 +424,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [ ruleset: ['[Gen 9] Ubers'], banlist: [ // Ubers OU - 'Arceus-Normal', 'Arceus-Fairy', 'Arceus-Ghost', 'Arceus-Ground', 'Arceus-Water', 'Calyrex-Ice', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Speed', 'Ditto', + 'Arceus-Normal', 'Arceus-Fairy', 'Arceus-Ghost', 'Arceus-Ground', 'Arceus-Water', 'Blissey', 'Calyrex-Ice', 'Deoxys-Attack', 'Deoxys-Speed', 'Ditto', 'Dondozo', 'Eternatus', 'Flutter Mane', 'Giratina-Origin', 'Glimmora', 'Gliscor', 'Grimmsnarl', 'Groudon', 'Hatterene', 'Ho-Oh', 'Kingambit', 'Koraidon', - 'Kyogre', 'Kyurem-Black', 'Landorus-Therian', 'Lunala', 'Necrozma-Dusk-Mane', 'Rayquaza', 'Ribombee', 'Skeledirge', 'Terapagos', 'Ting-Lu', 'Zacian-Crowned', + 'Kyogre', 'Kyurem-Black', 'Landorus-Therian', 'Lunala', 'Necrozma-Dusk-Mane', 'Ribombee', 'Skeledirge', 'Terapagos', 'Ting-Lu', 'Zacian-Crowned', // Ubers UUBL + Lunala, Arceus-Ghost, Arceus-Water - 'Arceus-Dragon', 'Arceus-Electric', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Steel', 'Giratina', 'Necrozma-Dawn-Wings', 'Shaymin-Sky', 'Spectrier', 'Zacian', - 'Zekrom', + 'Arceus-Dragon', 'Arceus-Electric', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Steel', 'Giratina', 'Necrozma-Dawn-Wings', 'Rayquaza', 'Shaymin-Sky', 'Spectrier', + 'Zacian', 'Zekrom', ], }, @@ -435,6 +487,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [ ruleset: ['[Gen 9] NatDex Draft', 'Item Clause = 2', 'Little Cup'], banlist: ['Dragon Rage', 'Sonic Boom'], }, + { + name: "[Gen 9 Champions] Draft", + mod: 'champions', + searchShow: false, + itemClauseDefault: true, + ruleset: ['Standard Draft'], + }, { name: "[Gen 8] Draft", mod: 'gen8', @@ -508,188 +567,267 @@ export const Formats: import('../sim/dex-formats').FormatList = [ }, }, { - name: "[Gen 9] Linked", - desc: `The first two moves in a Pokémon's moveset are used simultaneously.`, - mod: 'linked', - // searchShow: false, - ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Clause', 'Terastal Clause'], - banlist: [ - 'Annihilape', 'Arceus', 'Archaludon', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin', - 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Jirachi', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', - 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Meloetta', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', - 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', - 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Drought', 'Electric Surge', 'Moody', - 'Sand Rush', 'Serene Grace', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'Booster Energy', 'King\'s Rock', 'Quick Claw', 'Razor Fang', - 'Baton Pass', 'Last Respects', 'Shed Tail', - ], - restricted: [ - 'Assurance', 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Encore', 'Endeavor', 'Fly', 'Imprison', 'Nasty Plot', 'Phantom Force', - 'Protect', 'Ruination', 'Shadow Force', 'Shell Smash', 'Silk Trap', 'Spiky Shield', 'Sunny Day', 'Super Fang', 'Swords Dance', 'Taunt', 'Trick Room', - ], - onValidateSet(set) { - const problems = []; - for (const [i, moveid] of set.moves.entries()) { - const move = this.dex.moves.get(moveid); - if ([0, 1].includes(i) && this.ruleTable.isRestricted(`move:${move.id}`)) { - problems.push(`${set.name || set.species}'s move ${move.name} cannot be linked.`); - } - } - return problems; - }, - }, - { - name: "[Gen 9] 350 Cup", - desc: `Pokemon with a BST of 350 or lower have their stats doubled.`, + name: "[Gen 9] Alphabet Cup", + desc: `Allows Pokémon to use any move that shares the same first letter as their name or a previous evolution's name.`, mod: 'gen9', // searchShow: false, - ruleset: ['Standard OMs', 'Sleep Moves Clause', '350 Cup Mod', 'Evasion Clause'], - banlist: ['Calyrex-Shadow', 'Clefairy', 'Flittle', 'Gastly', 'Miraidon', 'Pikachu', 'Rufflet', 'Smeargle', 'Arena Trap', 'Moody', 'Shadow Tag', 'Eviolite', 'Baton Pass'], - }, - { - name: "[Gen 9] Pokebilities AAA", - desc: `Pokémon have all of their released abilities simultaneously, as well as one ability they cannot normally use.`, - mod: 'pokebilities', - // searchShow: false, - ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'AAA Restricted Abilities', 'Terastal Clause', 'Sleep Moves Clause'], + ruleset: ['Standard OMs', 'Alphabet Cup Move Legality', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ - 'Annihilape', 'Arcanine-Hisui', 'Arceus', 'Archaludon', 'Azumarill', 'Basculegion', 'Basculin', 'Baxcalibur', 'Blaziken', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow', - 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite', - 'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gliscor', 'Gouging Fire', 'Groudon', 'Hawlucha', - 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo', 'Kleavor', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', - 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palkia', 'Palkia-Origin', - 'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Serperior', 'Shaymin-Sky', 'Smeargle', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon', - 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Yanmega', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap', - 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Shadow Tag', - 'Regenerator + Wimp Out', 'Regenerator + Emergency Exit', 'Regenerator > 2', 'Drizzle + Swift Swim', 'Primordial Sea + Swift Swim', 'Drought + Chlorophyll', - 'Desolate Land + Chlorophyll', 'Electric Surge + Surge Surfer', 'Hadron Engine + Surge Surfer', 'Hadron Engine + Quark Drive', 'Electric Surge + Quark Drive', - 'Drought + Protosynthesis', 'Sand Stream + Sand Rush', 'Sand Stream + Sand Veil', 'Snow Warning + Snow Cloak', 'Snow Warning + Slush Rush', - 'Bright Powder', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail', 'Stored Power', + 'Annihilape', 'Arceus', 'Baxcalibur', 'Blaziken', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin', + 'Dragapult', 'Dragonite', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kingambit', 'Koraidon', + 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Mamoswine', 'Meowscarada', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', + 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Sceptile', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', + 'Urshifu-Single-Strike', 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'Heat Rock', + 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', ], restricted: [ - 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Orichalcum Pulse', - 'Parental Bond', 'Poison Heal', 'Pure Power', 'Sand Veil', 'Simple', 'Snow Cloak', 'Speed Boost', 'Stakeout', 'Stench', 'Tinted Lens', 'Toxic Debris', 'Triage', 'Unburden', - 'Water Bubble', 'Wonder Guard', + 'Belly Drum', 'Burning Bulwark', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Extreme Speed', 'Fillet Away', 'Glacial Lance', 'Glare', 'Lumina Crash', 'Rage Fist', + 'Revival Blessing', 'Sacred Fire', 'Salt Cure', 'Shell Smash', 'Shift Gear', 'Surging Strikes', 'Tail Glow', 'Triple Arrows', ], - onValidateSet(set) { + }, + { + name: "[Gen 9] 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 moves from the next stage Pokémon.`, + mod: 'gen9', + // searchShow: false, + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause'], + banlist: [ + 'Basculin-White-Striped', 'Duraludon', 'Kyogre', 'Miraidon', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Ursaring', 'Arena Trap', + 'Huge Power', 'Pure Power', 'Shadow Tag', 'Moody', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail', + ], + restricted: ['Espathra', 'Frosmoth', 'Gallade', 'Lilligant-Hisui', 'Lunala', 'Solgaleo'], + onValidateTeam(team) { + const nums = new Set(); + for (const set of team) { + const name = set.name; + const species = this.dex.species.get(name); + if (nums.has(species.num)) { + return [ + `Your Pok\u00e9mon must have different nicknames.`, + `(You have more than one Pok\u00e9mon named after a form of '${species.name}')`, + ]; + } + if (species.exists && species.name !== set.species) nums.add(species.num); + } + if (!nums.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.)`, + ]; + } + }, + checkCanLearn(move, species, lsetData, set) { + if (!(set as any).sp?.exists || !(set as any).crossSpecies?.exists) { + return this.checkCanLearn(move, species, lsetData, set); + } + const problem = this.checkCanLearn(move, (set as any).sp); + if (!problem) return null; + if (this.checkCanLearn(move, (set as any).crossSpecies)) return problem; + return null; + }, + validateSet(set, teamHas) { + const crossSpecies = this.dex.species.get(set.name); + let problems = this.dex.formats.get('Obtainable Misc').onChangeSet?.call(this, set, this.format) || null; + if (Array.isArray(problems) && problems.length) return problems; + const crossNonstandard = (!this.ruleTable.has('natdexmod') && crossSpecies.isNonstandard === 'Past') || + crossSpecies.isNonstandard === 'Future'; + const crossIsCap = !this.ruleTable.has('+pokemontag:cap') && crossSpecies.isNonstandard === 'CAP'; + if (!crossSpecies.exists || crossNonstandard || crossIsCap) return this.validateSet(set, teamHas); const species = this.dex.species.get(set.species); - const unSeenAbilities = Object.keys(species.abilities) - .filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden)) - .map(key => species.abilities[key as "0" | "1" | "H" | "S"]) - .filter(ability => ability !== set.ability); - if (unSeenAbilities.length && this.toID(set.ability) !== this.toID(species.abilities['S'])) { - for (const abilityName of unSeenAbilities) { - const banReason = this.ruleTable.check('ability:' + this.toID(abilityName)); - if (banReason) { - return [`${set.name}'s ability ${abilityName} is ${banReason}.`]; - } + const check = this.checkSpecies(set, species, species, {}); + if (check) return [check]; + const nonstandard = !this.ruleTable.has('natdexmod') && species.isNonstandard === 'Past'; + const isCap = !this.ruleTable.has('+pokemontag:cap') && species.isNonstandard === 'CAP'; + if (!species.exists || nonstandard || isCap || 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" && + !this.ruleTable.has('+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.species.get(crossSpecies.prevo); + if (!crossPrevoSpecies.prevo !== !species.prevo) { + return [ + `${species.name} cannot cross evolve into ${crossSpecies.name} because they are not consecutive evolution stages.`, + ]; + } + const item = this.dex.items.get(set.item); + if (item.itemUser?.length) { + if (!item.itemUser.includes(crossSpecies.name) || crossSpecies.name !== species.name) { + return [`${species.name} cannot use ${item.name} because it is cross evolved into ${crossSpecies.name}.`]; } } + const ability = this.dex.abilities.get(set.ability); + if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) { + set.species = crossSpecies.name; + } + + (set as any).sp = species; + (set as any).crossSpecies = crossSpecies; + 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.species.get(target.set.name); + if (!crossSpecies.exists) return; + if (species.battleOnly || !species.nfe) return; + const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable" && + !this.ruleTable.has('+unobtainable')); + if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) return; + const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo); + if (!crossPrevoSpecies.prevo !== !species.prevo) return; + + const mixedSpecies = this.dex.deepClone(species); + 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; + mixedSpecies.bst = 0; + let i: StatID; + for (i in species.baseStats) { + const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i]; + mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255); + mixedSpecies.bst += mixedSpecies.baseStats[i]; + } + 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()) { - if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) { - continue; - } - pokemon.m.innates = Object.keys(pokemon.species.abilities) - .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden)) - .map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"])) - .filter(ability => ability !== pokemon.ability); + pokemon.baseSpecies = pokemon.species; } }, - onBeforeSwitchIn(pokemon) { - if (pokemon.m.innates) { - for (const innate of pokemon.m.innates) { - if (pokemon.hasAbility(innate)) continue; - const effect = 'ability:' + this.toID(innate); - pokemon.volatiles[effect] = this.initEffectState({ id: effect, target: pokemon }); - } - } - }, - onSwitchOut(pokemon) { - for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) { - pokemon.removeVolatile(innate); - } - }, - onFaint(pokemon) { - for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) { - const innateEffect = this.dex.conditions.get(innate) as Effect; - this.singleEvent('End', innateEffect, null, pokemon); - } - }, - onAfterMega(pokemon) { - for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) { - pokemon.removeVolatile(innate); - } - pokemon.m.innates = undefined; - }, }, { - name: "[Gen 9] 4v4 Doubles UU", - desc: "VGC rules, but only Pokémon that get less than 4.52% usage on the VGC ladder are legal, as well as a few other guidelines.", + name: "[Gen 9] STAAABmons", + desc: `Pokémon have access to almost any ability and can use any move of their typing, in addition to the moves they can normally learn.`, mod: 'gen9', - gameType: 'doubles', - bestOfDefault: true, - ruleset: ['[Gen 9] VGC 2026 Reg F', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'OHKO Clause'], + ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Terastal Clause', 'STABmons Move Legality'], banlist: [ - 'Amoonguss', 'Annihilape', 'Arcanine-Hisui', 'Basculegion-M', 'Chi-Yu', 'Chien-Pao', 'Cresselia', 'Dondozo', 'Dragonite', 'Enamorus-Incarnate', 'Farigiraf', 'Flutter Mane', - 'Gholdengo', 'Gouging Fire', 'Incineroar', 'Indeedee-F', 'Iron Crown', 'Landorus-Incarnate', 'Landorus-Therian', 'Ogerpon-Cornerstone', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', - 'Porygon2', 'Raging Bolt', 'Regidrago', 'Rillaboom', 'Roaring Moon', 'Sneasler', 'Ting-Lu', 'Torkoal', 'Tornadus-Incarnate', 'Ursaluna-Base', 'Urshifu-Single-Strike', - 'Urshifu-Rapid-Strike', 'Whimsicott', 'Commander', 'Bright Powder', 'King\'s Rock', 'Razor Fang', + 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Ceruledge', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite', + 'Enamorus-Incarnate', 'Eternatus', 'Flutter Mane', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Hoopa-Unbound', 'Ho-Oh', 'Iron Bundle', 'Iron Moth', 'Iron Valiant', + 'Keldeo', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Meloetta', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', + 'Noivern', 'Ogerpon-Cornerstone', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', 'Palkia', 'Palkia-Origin', 'Raging Bolt', 'Rayquaza', 'Regigigas', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', + 'Slaking', 'Sneasler', 'Solgaleo', 'Spectrier', 'Thundurus', 'Thundurus-Therian', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', + 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap', 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Ice Scales', + 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Pure Power', 'Shadow Tag', 'Simple', + 'Speed Boost', 'Stakeout', 'Stench', 'Tangled Feet', 'Tinted Lens', 'Toxic Debris', 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', + 'Shed Tail', + ], + restricted: [ + 'Acupressure', 'Astral Barrage', 'Belly Drum', 'Boomburst', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Dragon Energy', 'Electro Shot', 'Eruption', 'Esper Wing', 'Extreme Speed', + 'Fillet Away', 'Final Gambit', 'Gigaton Hammer', 'Glacial Lance', 'Jet Punch', 'Lumina Crash', 'No Retreat', 'Population Bomb', 'Rage Fist', 'Revival Blessing', 'Rising Voltage', 'Shell Smash', + 'Shift Gear', 'Surging Strikes', 'Tail Glow', 'Take Heart', 'Torch Song', 'Transform', 'Triple Arrows', 'V-create', 'Victory Dance', 'Water Spout', 'Wicked Blow', 'Wicked Torque', ], }, { - name: "[Gen 9] National Dex RU", + name: "[Gen 9] Monocolor", + desc: `All Pokémon on a team must share a color.`, + mod: 'gen9', + ruleset: ['[Gen 9] OU', 'Same Color Clause'], + banlist: ['Ogerpon-Wellspring'], + unbanlist: ['Archaludon', 'Volcarona'], + }, + { + name: "[Gen 9] National Dex 35 Pokes", + desc: `Only 35 Pokémon are legal.`, mod: 'gen9', // searchShow: false, - ruleset: ['[Gen 9] National Dex UU'], - banlist: ['ND UU', 'ND RUBL', 'Slowbronite'], + ruleset: [ + 'Standard NatDex', + '!Species Clause', 'Forme Clause', 'Sleep Moves Clause', 'Terastal Clause', 'DryPass Clause', 'Mega Rayquaza Clause', + ], + banlist: [ + 'ND Uber', 'ND AG', 'ND OU', 'ND UUBL', 'ND UU', 'ND RUBL', 'ND RU', 'ND NFE', 'ND LC', + 'Battle Bond', 'Moody', 'Power Construct', 'Shadow Tag', 'Tangled Feet', 'Berserk Gene', 'Booster Energy', 'King\'s Rock', 'Quick Claw', + 'Razor Fang', 'Hidden Power', 'Last Respects', 'Shed Tail', 'Baton Pass + Contrary', 'Baton Pass + Rapid Spin', 'Baton Pass + Well-Baked Body', + ], + unbanlist: [ + 'Articuno-Base', 'Brute Bonnet', 'Cacturne', 'Clefable-Base', 'Cobalion', 'Drifblim', 'Dugtrio-Base', 'Gabite', 'Gogoat', 'Hariyama', 'Hippowdon', 'Krookodile', + 'Lurantis-Base', 'Lycanroc-Base', 'Mabosstiff', 'Minior', 'Munkidori', 'Passimian', 'Pawmot', 'Persian-Base', 'Raichu-Alola', 'Roserade', 'Rotom-Heat', 'Sandaconda', + 'Sceptile-Base', 'Stoutland', 'Stunfisk-Base', 'Tentacruel', 'Thwackey', 'Tinkaton', 'Toedscruel', 'Tsareena', 'Uxie', 'Vivillon', 'Whiscash', + 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z', 'Yawn', + ], + // Stupid hardcode + onValidateSet(set, format, setHas, teamHas) { + if (set.item) { + const item = this.dex.items.get(set.item); + if (item.megaStone && !(this.ruleTable.has(`+item:${item.id}`) || this.ruleTable.has(`+pokemontag:mega`))) { + return [`Mega Evolution is banned.`]; + } + if (item.zMove && !(this.ruleTable.has(`+item:${item.id}`))) { + return [`${item.name} is banned.`]; + } + } + }, }, { - name: "[Gen 6] Megas Revisited Random Battle", - desc: `A Gen 6 metagame where every Mega Evolution was reevaluated and redesigned.`, - mod: 'gen6megasrevisited', + name: "[Gen 9] ReGeneration Random Battle", + desc: `A Kanto-only Gen 9 metagame where many of the Pokemon have been redesigned with modern design philosophies.`, + mod: 'gen9regeneration', team: 'random', bestOfDefault: true, - ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod', 'Mega Data Mod'], + ruleset: ['Obtainable', 'Terastal Clause', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod', 'Data Preview'], onBegin() { - this.add(`raw|
Need help with all of the new Megas and abilities?
Then make sure to check out the spreadsheet or use /dt!
`); - this.add('-message', `Welcome to Megas Revisited!`); - this.add('-message', `This is a Generation 6 OU-based Pet Mod where every existing Mega Evolution has been redesigned.`); + this.add(`raw|
Need help with all of the new moves and abilities?
Then make sure to check out the spreadsheet or use /dt!
`); + this.add('-message', `Welcome to ReGeneration!`); + this.add('-message', `This is a Generation 9 Pet Mod where many Kanto Pokemon have been redesigned to fit the modern era!`); this.add('-message', `You can find our thread and metagame resources here:`); - this.add('-message', `https://www.smogon.com/forums/threads/3713949/`); + this.add('-message', `https://www.smogon.com/forums/threads/3718196/`); }, }, { - name: "[Gen 9] ChatBats", - desc: `A Random Battles Solomod made by the Pet Mods chatroom on Showdown.`, - mod: 'chatbats', - team: 'randomChatBats', - ruleset: ['Obtainable', 'Species Clause', 'HP Percentage Mod', 'Sleep Clause Mod', 'Data Preview', 'Cancel Mod'], - onSwitchIn(pokemon) { - this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - }, - // Dachsbun causes Koraidon to generate on enemy team. Implemented here. + name: "[Gen 9] CCAPM2025 Random Battle", + desc: `A Gen 9 metagame created in the Pet Mods Room featuring Pokemon with new form changes.`, + mod: 'ccapm2025', + team: 'randomC25', + bestOfDefault: true, + ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod', 'Terastal Clause', 'CCAPM Form Changes', 'Data Preview'], onBegin() { - this.add(`raw|
Need help with all of the new moves, abilities, and wacky sets?
Then make sure to check out the ChatBats Compendium or use /dt!
`); - this.add(`raw|Welcome to ChatBats!`); - this.add(`raw|ChatBats is a Random Battles format created by the Pet Mods room here on Showdown!`); - this.add(`raw|If you want to help create new sets, we will host events periodically in the Pet Mods room!`); - this.add(`raw|Anyone who is there can help create a new set for a random mon, changing moves, abilities, stats, and even custom formes.`); + this.add(`raw|
Need help with all of the wacky new forms, moves, items, and abilities?
Then make sure to check out the spreadsheet or use /dt!
`); + this.add('-message', `Welcome to Commuity Create-A-Pet Mod 2025!`); + this.add('-message', `This is a Generation 9 Pet Mod where every Pokemon has a new form change!`); + this.add('-message', `You can find our thread and metagame resources here:`); + this.add('-message', `https://www.smogon.com/forums/threads/3773591/`); + this.add('-message', `This metagame was created last year in the Pet Mods Room here on Showdown!`); + this.add('-message', `Be sure to swing by to discuss the metagame and participate in events like CCAPM:`); + this.add('-message', `https://play.pokemonshowdown.com/petmods`); + }, + onSwitchInPriority: 100, + onSwitchIn(pokemon) { + if ((pokemon.illusion || pokemon).getTypes(true, true).join('/') !== + this.dex.forGen(9).species.get((pokemon.illusion || pokemon).species.name).types.join('/') && + !pokemon.terastallized) { + this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]'); + } }, }, { - name: "[Gen 4] Ubers", - mod: 'gen4', + name: "[Gen 5] Ubers", + mod: 'gen5', // searchShow: false, - ruleset: ['Standard'], - banlist: ['AG'], + ruleset: ['Standard', 'Sleep Clause Mod'], }, { - name: "[Gen 6] NU", - mod: 'gen6', - // searchShow: false, - ruleset: ['[Gen 6] RU'], - banlist: ['RU', 'NUBL'], + name: "[Gen 3] FRLG OU", + mod: 'gen3frlg', + ruleset: ['Standard', 'One Boost Passer Clause', 'Freeze Clause Mod'], + banlist: ['Uber', 'Sand Veil', 'King\'s Rock'], }, { name: "[Gen 4] VGC 2009", @@ -764,15 +902,14 @@ export const Formats: import('../sim/dex-formats').FormatList = [ mod: 'mixandmega', ruleset: ['Standard OMs', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Terastal Clause'], banlist: [ - 'Calyrex-Shadow', 'Koraidon', 'Kyogre', 'Miraidon', 'Moody', 'Shadow Tag', 'Beedrillite', 'Blazikenite', 'Gengarite', - 'Kangaskhanite', 'Lucarionite Z', 'Malamarite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Red Orb', 'Baton Pass', - 'Shed Tail', + 'Calyrex-Shadow', 'Koraidon', 'Kyogre', 'Miraidon', 'Moody', 'Shadow Tag', 'Beedrillite', 'Blazikenite', 'Gengarite', 'Kangaskhanite', 'Lucarionite Z', + 'Malamarite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Red Orb', 'Scovillainite', 'Starminite', 'Baton Pass', 'Shed Tail', ], restricted: [ - 'Arceus', 'Basculegion-M', 'Calyrex-Ice', 'Ceruledge', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Eternatus', 'Flutter Mane', - 'Gengar', 'Gholdengo', 'Giratina', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kyurem-Black', 'Kyurem-White', 'Lugia', - 'Lunala', 'Manaphy', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', - 'Slaking', 'Sneasler', 'Solgaleo', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Walking Wake', 'Zacian', 'Zekrom', + 'Arceus', 'Basculegion-M', 'Calyrex-Ice', 'Ceruledge', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Eternatus', 'Flutter Mane', 'Gengar', 'Gholdengo', + 'Giratina', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Manaphy', 'Mewtwo', 'Necrozma-Dawn-Wings', + 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Slaking', 'Sneasler', 'Solgaleo', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', + 'Walking Wake', 'Zacian', 'Zekrom', ], onValidateTeam(team) { const itemTable = new Set(); @@ -826,6 +963,83 @@ export const Formats: import('../sim/dex-formats').FormatList = [ } }, }, + { + name: "[Gen 9] Pokebilities AAA", + desc: `Pokémon have all of their released abilities simultaneously, as well as one ability they cannot normally use.`, + mod: 'pokebilities', + ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'AAA Restricted Abilities', 'Terastal Clause', 'Sleep Moves Clause'], + banlist: [ + 'Annihilape', 'Arcanine-Hisui', 'Arceus', 'Archaludon', 'Azumarill', 'Basculegion', 'Basculin', 'Baxcalibur', 'Blaziken', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow', + 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Cinccino', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', + 'Dragonite', 'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gliscor', 'Gouging Fire', 'Groudon', + 'Hawlucha', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo', 'Kleavor', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', + 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palkia', + 'Palkia-Origin', 'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Serperior', 'Shaymin-Sky', 'Smeargle', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', + 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Yanmega', 'Zacian', 'Zacian-Crowned', 'Zapdos-Galar', 'Zekrom', + 'Zoroark-Hisui', 'Arena Trap', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Shadow Tag', + 'Regenerator + Wimp Out', 'Regenerator + Emergency Exit', 'Regenerator > 2', 'Drizzle + Swift Swim', 'Primordial Sea + Swift Swim', 'Drought + Chlorophyll', + 'Desolate Land + Chlorophyll', 'Electric Surge + Surge Surfer', 'Hadron Engine + Surge Surfer', 'Hadron Engine + Quark Drive', 'Electric Surge + Quark Drive', + 'Drought + Protosynthesis', 'Sand Stream + Sand Rush', 'Sand Stream + Sand Veil', 'Snow Warning + Snow Cloak', 'Snow Warning + Slush Rush', + 'Bright Powder', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail', 'Stored Power', + ], + restricted: [ + 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Orichalcum Pulse', + 'Parental Bond', 'Poison Heal', 'Pure Power', 'Sand Veil', 'Simple', 'Snow Cloak', 'Speed Boost', 'Stakeout', 'Stench', 'Tinted Lens', 'Toxic Debris', 'Triage', 'Unburden', + 'Water Bubble', 'Wonder Guard', + ], + onValidateSet(set) { + const species = this.dex.species.get(set.species); + const unSeenAbilities = Object.keys(species.abilities) + .filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden)) + .map(key => species.abilities[key as "0" | "1" | "H" | "S"]) + .filter(ability => ability !== set.ability); + if (unSeenAbilities.length && this.toID(set.ability) !== this.toID(species.abilities['S'])) { + for (const abilityName of unSeenAbilities) { + const banReason = this.ruleTable.check('ability:' + this.toID(abilityName)); + if (banReason) { + return [`${set.name}'s ability ${abilityName} is ${banReason}.`]; + } + } + } + }, + onBegin() { + for (const pokemon of this.getAllPokemon()) { + if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) { + continue; + } + pokemon.m.innates = Object.keys(pokemon.species.abilities) + .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden)) + .map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"])) + .filter(ability => ability !== pokemon.ability); + } + }, + onBeforeSwitchIn(pokemon) { + if (pokemon.m.innates) { + for (const innate of pokemon.m.innates) { + if (pokemon.hasAbility(innate)) continue; + const effect = 'ability:' + this.toID(innate); + pokemon.volatiles[effect] = this.initEffectState({ id: effect, target: pokemon }); + } + } + }, + onSwitchOut(pokemon) { + for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) { + pokemon.removeVolatile(innate); + } + }, + onFaint(pokemon) { + for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) { + const innateEffect = this.dex.conditions.get(innate) as Effect; + this.singleEvent('End', innateEffect, null, pokemon); + } + }, + onAfterMega(pokemon) { + for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) { + pokemon.removeVolatile(innate); + } + pokemon.m.innates = undefined; + }, + }, { name: "[Gen 9] Shared Power", desc: `Once a Pokémon switches in, its ability is shared with the rest of the team.`, @@ -960,23 +1174,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [ }, }, { - name: "[Gen 9] Alphabet Cup", - desc: `Allows Pokémon to use any move that shares the same first letter as their name or a previous evolution's name.`, + name: "[Gen 9] 350 Cup", + desc: `Pokemon with a BST of 350 or lower have their stats doubled.`, mod: 'gen9', searchShow: false, - ruleset: ['Standard OMs', 'Alphabet Cup Move Legality', 'Sleep Moves Clause', 'Terastal Clause'], - banlist: [ - 'Annihilape', 'Arceus', 'Baxcalibur', 'Blaziken', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin', - 'Dragapult', 'Dragonite', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kingambit', 'Koraidon', - 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Mamoswine', 'Meowscarada', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', - 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Sceptile', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', - 'Urshifu-Single-Strike', 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'Heat Rock', - 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail', - ], - restricted: [ - 'Belly Drum', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Extreme Speed', 'Fillet Away', 'Glacial Lance', 'Glare', 'Lumina Crash', 'Rage Fist', 'Revival Blessing', - 'Sacred Fire', 'Salt Cure', 'Shell Smash', 'Shift Gear', 'Surging Strikes', 'Tail Glow', 'Triple Arrows', - ], + ruleset: ['Standard OMs', 'Sleep Moves Clause', '350 Cup Mod', 'Evasion Clause'], + banlist: ['Calyrex-Shadow', 'Clefairy', 'Flittle', 'Gastly', 'Miraidon', 'Pikachu', 'Rufflet', 'Smeargle', 'Arena Trap', 'Moody', 'Shadow Tag', 'Eviolite', 'Baton Pass'], }, { name: "[Gen 9] Bad 'n Boosted", @@ -1225,16 +1428,19 @@ export const Formats: import('../sim/dex-formats').FormatList = [ for (const scrambledMove of pokemon.m.scrambled.moves) { const move = this.dex.moves.get(scrambledMove.thing); + const ppUps = move.noPPBoosts ? 0 : 3; + const basePP = this.calculatePP(move, ppUps); const newMove = { move: move.name, id: move.id, - pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, - maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, + pp: basePP, + maxpp: basePP, target: move.target, disabled: false, used: false, }; pokemon.baseMoveSlots.push(newMove); + pokemon.ppUps.push(ppUps); } pokemon.moveSlots = pokemon.baseMoveSlots.slice(); } @@ -1287,134 +1493,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [ 'Quiver Dance', 'Rage Fist', 'Shed Tail', 'Shell Smash', 'Spore', 'Transform', ], }, - { - name: "[Gen 9] 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 moves from the next stage Pokémon.`, - mod: 'gen9', - searchShow: false, - ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause'], - banlist: [ - 'Basculin-White-Striped', 'Duraludon', 'Kyogre', 'Miraidon', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Ursaring', 'Arena Trap', - 'Huge Power', 'Pure Power', 'Shadow Tag', 'Moody', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail', - ], - restricted: ['Espathra', 'Frosmoth', 'Gallade', 'Lilligant-Hisui', 'Lunala', 'Solgaleo'], - onValidateTeam(team) { - const nums = new Set(); - for (const set of team) { - const name = set.name; - const species = this.dex.species.get(name); - if (nums.has(species.num)) { - return [ - `Your Pok\u00e9mon must have different nicknames.`, - `(You have more than one Pok\u00e9mon named after a form of '${species.name}')`, - ]; - } - if (species.exists && species.name !== set.species) nums.add(species.num); - } - if (!nums.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.)`, - ]; - } - }, - checkCanLearn(move, species, lsetData, set) { - if (!(set as any).sp?.exists || !(set as any).crossSpecies?.exists) { - return this.checkCanLearn(move, species, lsetData, set); - } - const problem = this.checkCanLearn(move, (set as any).sp); - if (!problem) return null; - if (this.checkCanLearn(move, (set as any).crossSpecies)) return problem; - return null; - }, - validateSet(set, teamHas) { - const crossSpecies = this.dex.species.get(set.name); - let problems = this.dex.formats.get('Obtainable Misc').onChangeSet?.call(this, set, this.format) || null; - if (Array.isArray(problems) && problems.length) return problems; - const crossNonstandard = (!this.ruleTable.has('natdexmod') && crossSpecies.isNonstandard === 'Past') || - crossSpecies.isNonstandard === 'Future'; - const crossIsCap = !this.ruleTable.has('+pokemontag:cap') && crossSpecies.isNonstandard === 'CAP'; - if (!crossSpecies.exists || crossNonstandard || crossIsCap) return this.validateSet(set, teamHas); - const species = this.dex.species.get(set.species); - const check = this.checkSpecies(set, species, species, {}); - if (check) return [check]; - const nonstandard = !this.ruleTable.has('natdexmod') && species.isNonstandard === 'Past'; - const isCap = !this.ruleTable.has('+pokemontag:cap') && species.isNonstandard === 'CAP'; - if (!species.exists || nonstandard || isCap || 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" && - !this.ruleTable.has('+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.species.get(crossSpecies.prevo); - if (!crossPrevoSpecies.prevo !== !species.prevo) { - return [ - `${species.name} cannot cross evolve into ${crossSpecies.name} because they are not consecutive evolution stages.`, - ]; - } - const item = this.dex.items.get(set.item); - if (item.itemUser?.length) { - if (!item.itemUser.includes(crossSpecies.name) || crossSpecies.name !== species.name) { - return [`${species.name} cannot use ${item.name} because it is cross evolved into ${crossSpecies.name}.`]; - } - } - const ability = this.dex.abilities.get(set.ability); - if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) { - set.species = crossSpecies.name; - } - - (set as any).sp = species; - (set as any).crossSpecies = crossSpecies; - 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.species.get(target.set.name); - if (!crossSpecies.exists) return; - if (species.battleOnly || !species.nfe) return; - const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable" && - !this.ruleTable.has('+unobtainable')); - if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) return; - const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo); - if (!crossPrevoSpecies.prevo !== !species.prevo) return; - - const mixedSpecies = this.dex.deepClone(species); - 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; - mixedSpecies.bst = 0; - let i: StatID; - for (i in species.baseStats) { - const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i]; - mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255); - mixedSpecies.bst += mixedSpecies.baseStats[i]; - } - 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 9] Fervent Impersonation", desc: `Nickname a Pokémon after another Pokémon that it shares a moveset with, and it will transform into the Pokémon it's nicknamed after once it drops to or below 50% health.`, @@ -1938,6 +2016,36 @@ export const Formats: import('../sim/dex-formats').FormatList = [ 'Baton Pass', 'Last Respects', 'Shed Tail', ], }, + { + name: "[Gen 9] Linked", + desc: `The first two moves in a Pokémon's moveset are used simultaneously.`, + mod: 'linked', + searchShow: false, + ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Clause', 'Terastal Clause'], + banlist: [ + 'Annihilape', 'Arceus', 'Archaludon', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin', + 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Jirachi', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', + 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Meloetta', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', + 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', + 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Drought', 'Electric Surge', 'Moody', + 'Sand Rush', 'Serene Grace', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'Booster Energy', 'King\'s Rock', 'Quick Claw', 'Razor Fang', + 'Baton Pass', 'Last Respects', 'Shed Tail', + ], + restricted: [ + 'Assurance', 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Encore', 'Endeavor', 'Fake Out', 'Fly', 'Imprison', 'Nasty Plot', + 'Phantom Force', 'Protect', 'Ruination', 'Shadow Force', 'Shell Smash', 'Silk Trap', 'Spiky Shield', 'Sunny Day', 'Super Fang', 'Swords Dance', 'Taunt', 'Trick Room', + ], + onValidateSet(set) { + const problems = []; + for (const [i, moveid] of set.moves.entries()) { + const move = this.dex.moves.get(moveid); + if ([0, 1].includes(i) && this.ruleTable.isRestricted(`move:${move.id}`)) { + problems.push(`${set.name || set.species}'s move ${move.name} cannot be linked.`); + } + } + return problems; + }, + }, { name: "[Gen 9] Nature Swap", desc: `Pokémon have their stats swapped around based on their nature. A Pokémon with a Modest nature will have its Atk and Sp. Atk stats swap.`, @@ -2611,8 +2719,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [ // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb. baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage); - if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) { + const bypassProtect = target.getMoveHitData(move).bypassProtect; + if (bypassProtect) { baseDamage = this.battle.modify(baseDamage, 0.25); + if (bypassProtect !== true && bypassProtect.effectType === 'Ability') { + this.battle.add('-ability', pokemon, bypassProtect.name); + } this.battle.add('-zbroken', target); } @@ -2934,6 +3046,119 @@ export const Formats: import('../sim/dex-formats').FormatList = [ { section: "Temporary Tour Metas", }, + { + name: "[Gen 5] Almost Any Ability", + mod: 'gen5', + searchShow: false, + ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Gems Clause', 'Baton Pass Stat Clause', '!Obtainable Abilities', 'Ability Clause = 2'], + banlist: [ + 'Uber', 'Archeops', 'Bisharp', 'Deoxys-Defense', 'Deoxys-Speed', 'Keldeo', 'Kyurem-Black', 'Mamoswine', 'Regigigas', 'Shedinja', 'Slaking', 'Snorlax', 'Suicune', 'Terrakion', + 'Volcarona', 'Arena Trap', 'Chlorophyll', 'Contrary', 'Huge Power', 'Illusion', 'Imposter', 'Pure Power', 'Sand Rush', 'Shadow Tag', 'Simple', 'Speed Boost', 'Swift Swim', + 'Tinted Lens', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist', 'Swagger', + ], + unbanlist: ['Landorus-Incarnate'], + }, + { + name: "[Gen 9] NatDex Camove Chaos", + desc: `National Dex-based format where Pokemon can use almost any move in the game, and their first two move types determine their type.`, + mod: 'gen9', + searchShow: false, + ruleset: [ + 'Standard OMs', 'NatDex Mod', 'Terastal Clause', '!Obtainable Moves', '!Team Preview', 'Camomons Mod', 'CFZ Clause', + 'Sleep Moves Clause', 'Team Type Preview', + ], + banlist: [ + 'Aerodactyl-Mega', 'Alakazam', 'Arceus', 'Beedrill-Mega', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', + 'Charizard-Mega-Y', 'Chi-Yu', 'Chien-Pao', 'Comfey', 'Darmanitan', 'Darmanitan-Galar', 'Darmanitan-Galar-Zen', + 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dhelmise', 'Dondozo', 'Enamorus', 'Eternatus', 'Flutter Mane', 'Genesect', + 'Gengar-Mega', 'Giratina', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kartana', 'Komala', + 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lucario-Mega', 'Lugia', 'Lunala', + 'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Melmetal', 'Metagross-Mega', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', + 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palafin', 'Palkia', 'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Regieleki', + 'Reshiram', 'Roserade', 'Salamence-Mega', 'Sceptile-Mega', 'Serperior', 'Shedinja', 'Sneasler', 'Solgaleo', 'Spectrier', + 'Tapu Koko', 'Ting-Lu', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Xerneas', 'Xurkitree', 'Yveltal', 'Zacian', 'Zacian-Crowned', + 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zoroark', 'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Regenerator > 2', + 'Shadow Tag', 'Damp Rock', 'Heat Rock', 'Smooth Rock', 'Astral Barrage', 'Assist', 'Baneful Bunker', 'Baton Pass', 'Belly Drum', + 'Bolt Beak', 'Boomburst', 'Burning Bulwark', 'Ceaseless Edge', 'Chatter', 'Clangorous Soul', 'Dire Claw', 'Double Iron Bash', + 'Dragon Energy', 'Eruption', 'Extreme Speed', 'Electrify', 'Electro Shot', 'Final Gambit', 'Fillet Away', 'Fishious Rend', 'Geomancy', + 'Heal Order', 'Jet Punch', 'Last Respects', 'Lumina Crash', 'No Retreat', 'Octolock', 'Population Bomb', 'Power Trip', 'Quiver Dance', + 'Rage Fist', 'Revival Blessing', 'Rising Voltage', 'Salt Cure', 'Shed Tail', 'Shell Smash', 'Shift Gear', 'Stored Power', 'Substitute', + 'Surging Strikes', 'Tail Glow', 'Take Heart', 'Thousand Arrows', 'Transform', 'Triple Arrows', 'V-Create', 'Victory Dance', + 'Water Spout', 'Wicked Blow', 'King\'s Rock', 'Quick Claw', 'Razor Fang', + ], + unbanlist: ['Blazing Torque', 'Combat Torque', 'Light of Ruin', 'Magical Torque', 'Noxious Torque', 'Wicked Torque'], + }, + { + name: "[Gen 9] STABmons Mix and Mega", + desc: `Mega evolve any Pokémon with any mega stone, or transform them with Genesect Drives, Primal orbs, Origin orbs, Rusted items, Ogerpon Masks, Arceus Plates, and Silvally Memories with no limit. Pokémon can use any move of their typing, in addition to the moves they can normally learn. Mega and Primal boosts based on form changes from gen 7.`, + mod: 'mixandmega', + searchShow: false, + ruleset: ['Standard OMs', 'STABmons Move Legality', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Terastal Clause'], + banlist: [ + 'Arceus', 'Calyrex-Shadow', 'Enamorus-Incarnate', 'Koraidon', 'Kyogre', 'Miraidon', 'Komala', 'Moody', 'Shadow Tag', 'Beedrillite', 'Blazikenite', 'Gengarite', + 'Kangaskhanite', 'Lucarionite Z', 'Malamarite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Red Orb', 'Scovillainite', 'Starminite', 'Victreebelite', 'Zygardite', + 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail', + ], + restricted: [ + 'Basculegion-M', 'Calyrex-Ice', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dragapult', 'Eternatus', 'Flutter Mane', 'Gengar', 'Giratina', 'Gouging Fire', + 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Manaphy', 'Meloetta', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', + 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Slaking', 'Sneasler', 'Solgaleo', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Walking Wake', + 'Zacian', 'Zekrom', 'Zoroark-Hisui', 'Acupressure', 'Astral Barrage', 'Belly Drum', 'Blood Moon', 'Boomburst', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', + 'Dragon Energy', 'Electro Shot', 'Extreme Speed', 'Fillet Away', 'Gigaton Hammer', 'Jet Punch', 'Last Respects', 'Lumina Crash', 'No Retreat', 'Power Trip', + 'Rage Fist', 'Revival Blessing', 'Shed Tail', 'Shell Smash', 'Shift Gear', 'Surging Strikes', 'Torch Song', 'Triple Arrows', 'V-create', 'Victory Dance', 'Wicked Blow', + ], + onValidateTeam(team) { + const itemTable = new Set(); + for (const set of team) { + const item = this.dex.items.get(set.item); + if (!(item.forcedForme && !item.zMove) && !item.megaStone && + !item.isPrimalOrb && !item.name.startsWith('Rusted')) continue; + const natdex = this.ruleTable.has('natdexmod'); + if (natdex && item.id !== 'ultranecroziumz') continue; + const species = this.dex.species.get(set.species); + if (species.isNonstandard && !this.ruleTable.has(`+pokemontag:${this.toID(species.isNonstandard)}`)) { + return [`${species.baseSpecies} does not exist in gen 9.`]; + } + if (((item.itemUser?.includes(species.name) || item.forcedForme === species.name) && + !item.megaStone && !item.isPrimalOrb) || (natdex && species.name.startsWith('Necrozma-') && + item.id === 'ultranecroziumz')) { + continue; + } + if (this.ruleTable.isRestrictedSpecies(species) || this.toID(set.ability) === 'powerconstruct') { + 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/Primal Orb/Rusted item/Origin item/Ogerpon Mask/Arceus Plate/Silvally Memory.`, + `(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) { + const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies); + if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) { + // Place volatiles on the Pokémon to show its mega-evolved condition and details + this.add('-start', pokemon, originalSpecies.requiredItems?.[0] || originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]'); + const oSpecies = this.dex.species.get(pokemon.m.originalSpecies); + if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) { + this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); + } + } + }, + onSwitchOut(pokemon) { + const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies); + if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) { + this.add('-end', pokemon, originalSpecies.requiredItems?.[0] || originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]'); + } + }, + }, { name: "[Gen 9] Mix and Mega LC", desc: `Mega evolve any Pokémon with any mega stone, or transform them with Genesect Drives, Primal orbs, Origin orbs, Rusted items, Ogerpon Masks, Arceus Plates, and Silvally Memories with no limit. Mega and Primal boosts based on form changes from gen 7.`, @@ -2941,9 +3166,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [ searchShow: false, ruleset: ['Standard OMs', 'Little Cup', 'Sleep Clause Mod', 'Terastal Clause'], banlist: [ - 'Basculin-White-Striped', 'Dunsparce', 'Duraludon', 'Meditite', 'Rufflet', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Stantler', 'Moody', - 'Absolite Z', 'Beedrillite', 'Blazikenite', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Lucarionite Z', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Zygardite', - 'Baton Pass', 'Sticky Web', + 'Basculin-White-Striped', 'Dunsparce', 'Duraludon', 'Meditite', 'Rufflet', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Stantler', 'Moody', 'Absolite Z', 'Beedrillite', + 'Blazikenite', 'Gengarite', 'Glimmoranite', 'Kangaskhanite', 'Lucarionite', 'Lucarionite Z', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Scovillainite', 'Starminite', 'Victreebelite', + 'Zygardite', 'Baton Pass', 'Sticky Web', ], restricted: [ 'Aipom', 'Buizel', 'Cutiefly', 'Dratini', 'Elekid', 'Gastly', 'Girafarig', 'Gligar', 'Mienfoo', @@ -3002,173 +3227,92 @@ export const Formats: import('../sim/dex-formats').FormatList = [ }, }, { - name: "[Gen 8] Mix and Mega", - desc: `Mega evolve any Pokémon with any mega stone with no limit. Boosts based on mega evolution from gen 7.`, - mod: 'gen8mixandmega', + name: "[Gen 9] Godly Gift VG 2024 Reg G (Bo3)", + desc: `Battle Stadium Doubles-based format where each Pokémon receives one base stat from a God (Restricted Pokémon) depending on its position in the team. If there is no restricted Pokémon, it uses the Pokémon in the first slot.`, + mod: 'gen9', + gameType: 'doubles', searchShow: false, - ruleset: ['Standard', 'Dynamax Clause', 'Overflow Stat Mod'], + bestOfDefault: true, + ruleset: [ + 'Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Force Open Team Sheets', + 'Godly Gift Mod', 'Limit One Restricted', 'Sleep Moves Clause', + ], + banlist: ['Blissey', 'Chansey', 'Commander', 'Huge Power', 'Pure Power'], + restricted: ['Restricted Legendary'], + }, + { + name: "[Gen 9] Pokebilities BH", + desc: `Pokémon have all of their released abilities simultaneously, and anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`, + mod: 'pokebilities', + searchShow: false, + ruleset: [ + 'OHKO Clause', 'Evasion Clause', 'Species Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Moves Clause', + 'Endless Battle Clause', 'Hackmons Forme Legality', 'Species Reveal Clause', 'Terastal Clause', 'AAA Restricted Abilities', + ], banlist: [ - 'Calyrex-Shadow', 'Eternatus', 'Kyogre', 'Zacian', 'Zacian-Crowned', 'Moody', 'Shadow Tag', 'Beedrillite', 'Blazikenite', - 'Gengarite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Baton Pass', 'Electrify', + 'Basculegion-M', 'Basculegion-F', 'Blaziken-Mega', 'Calyrex-Shadow', 'Diancie-Mega', 'Enamorus-Incarnate', 'Excadrill', 'Gardevoir-Mega', 'Gengar-Mega', + 'Groudon-Primal', 'Gyarados-Mega', 'Hawlucha', 'Kangaskhan-Mega', 'Kartana', 'Koraidon', 'Kyogre-Primal', 'Kyurem-Black', 'Kyurem-White', 'Lucario-Mega', + 'Mawile-Mega', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Miraidon', 'Ogerpon-Hearthflame', 'Porygon-Z', 'Rayquaza-Mega', 'Reshiram', 'Shedinja', 'Zekrom', + 'Arena Trap', 'Comatose', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Regenerator + Emergency Exit', 'Regenerator + Fur Coat', 'Regenerator + Ice Scales', + 'Regenerator + Wimp Out', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Belly Drum', 'Burning Bulwark', 'Ceaseless Edge', 'Clangorous Soul', + 'Dire Claw', 'Electro Shot', 'Fillet Away', 'Imprison', 'Last Respects', 'Lumina Crash', 'No Retreat', 'Photon Geyser', 'Power Trip', 'Quiver Dance', + 'Rage Fist', 'Revival Blessing', 'Shed Tail', 'Shell Smash', 'Substitute', 'Tail Glow', 'V-create', ], restricted: [ - 'Calyrex-Ice', 'Dialga', 'Gengar', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', - 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu', 'Urshifu-Rapid-Strike', 'Solgaleo', - 'Xerneas', 'Yveltal', 'Zekrom', 'Power Construct', + 'Contrary', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Illusion', 'Innards Out', 'Libero', 'Liquid Ooze', 'Orichalcum Pulse', + 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Stakeout', 'Stench', 'Unburden', 'Water Bubble', 'Wonder Guard', ], - onValidateTeam(team) { - const itemTable = new Set(); - for (const set of team) { - const item = this.dex.items.get(set.item); - if (!item.megaStone) continue; - const species = this.dex.species.get(set.species); - const ability = this.dex.abilities.get(set.ability); - if (this.ruleTable.isRestricted(`item:${item.id}`) || this.ruleTable.isRestricted(`ability:${ability.id}`)) { - return [`${species.name} is not allowed to hold ${item.name}.`]; + onValidateSet(set) { + const species = this.dex.species.get(set.species); + const unSeenAbilities = Object.keys(species.abilities) + .filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden)) + .map(key => species.abilities[key as "0" | "1" | "H" | "S"]) + .filter(ability => ability !== set.ability); + if (unSeenAbilities.length && this.toID(set.ability) !== this.toID(species.abilities['S'])) { + for (const abilityName of unSeenAbilities) { + const banReason = this.ruleTable.check('ability:' + this.toID(abilityName)); + if (banReason) { + return [`${set.name}'s ability ${abilityName} is ${banReason}.`]; + } } - 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; + if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) { + continue; + } + pokemon.m.innates = Object.keys(pokemon.species.abilities) + .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden)) + .map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"])) + .filter(ability => ability !== pokemon.ability); } }, - onSwitchIn(pokemon) { - const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies); - if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) { - // Place volatiles on the Pokémon to show its mega-evolved condition and details - this.add('-start', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]'); - const oSpecies = this.dex.species.get(pokemon.m.originalSpecies); - if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) { - this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); + onBeforeSwitchIn(pokemon) { + if (pokemon.m.innates) { + for (const innate of pokemon.m.innates) { + if (pokemon.hasAbility(innate)) continue; + const effect = 'ability:' + this.toID(innate); + pokemon.volatiles[effect] = this.initEffectState({ id: effect, target: pokemon }); } } }, onSwitchOut(pokemon) { - const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies); - if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) { - this.add('-end', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]'); + for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) { + pokemon.removeVolatile(innate); } }, - }, - { - name: "[Gen 7] Mix and Mega", - desc: `Mega evolve any Pokémon with any mega stone, or transform them with Primal orbs, with no limit.`, - mod: 'gen7mixandmega', - searchShow: false, - ruleset: ['Standard', 'Mega Rayquaza Clause', 'Overflow Stat Mod'], - banlist: ['Shadow Tag', 'Gengarite', 'Baton Pass', 'Electrify'], - restricted: [ - 'Beedrillite', 'Blazikenite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Ultranecrozium Z', 'Power Construct', - 'Arceus', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed', 'Dialga', 'Dragonite', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', - 'Landorus-Therian', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', - 'Regigigas', 'Reshiram', 'Shuckle', 'Slaking', 'Solgaleo', 'Xerneas', 'Yveltal', 'Zekrom', - ], - onValidateTeam(team) { - const itemTable = new Set(); - for (const set of team) { - const item = this.dex.items.get(set.item); - if (!item.megaStone && !item.isPrimalOrb && item.id !== 'ultranecroziumz') continue; - const species = this.dex.species.get(set.species); - const ability = this.dex.abilities.get(set.ability); - if ((this.ruleTable.isRestrictedSpecies(species) || this.ruleTable.isRestricted(`item:${item.id}`) || - this.ruleTable.isRestricted(`ability:${ability.id}`)) && - !(((item.megaStone || item.isPrimalOrb) && item.itemUser?.includes(species.baseSpecies) || - (item.id === 'ultranecroziumz' && species.name.startsWith('Necrozma-'))))) { - 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/Primal Orb.`, - `(You have more than one ${item.name})`, - ]; - } - itemTable.add(item.id); + onFaint(pokemon) { + for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) { + const innateEffect = this.dex.conditions.get(innate) as Effect; + this.singleEvent('End', innateEffect, null, pokemon); } }, - onBegin() { - for (const pokemon of this.getAllPokemon()) { - pokemon.m.originalSpecies = pokemon.baseSpecies.name; - } - }, - onSwitchIn(pokemon) { - const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies); - if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) { - // Place volatiles on the Pokémon to show its mega-evolved condition and details - this.add('-start', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]'); - const oSpecies = this.dex.species.get(pokemon.m.originalSpecies); - if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) { - this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - } - } - }, - onSwitchOut(pokemon) { - const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies); - if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) { - this.add('-end', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]'); - } - }, - }, - { - name: "[Gen 6] Mix and Mega", - desc: `Mega evolve any Pokémon with any mega stone, or transform them with Primal orbs, with no limit.`, - mod: 'gen6mixandmega', - searchShow: false, - ruleset: ['Standard', 'Mega Rayquaza Clause', 'Overflow Stat Mod', '!Sleep Clause Mod', 'Sleep Moves Clause'], - banlist: ['Shadow Tag', 'Gengarite', 'Baton Pass', 'Electrify'], - restricted: [ - 'Beedrillite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Arceus', 'Darkrai', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed', - 'Dialga', 'Dragonite', 'Entei', 'Genesect', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', - 'Manaphy', 'Mewtwo', 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shaymin-Sky', 'Slaking', 'Xerneas', 'Yveltal', 'Zekrom', - 'Swagger', - ], - onValidateTeam(team) { - const itemTable = new Set(); - for (const set of team) { - const item = this.dex.items.get(set.item); - if (!item.megaStone && !item.isPrimalOrb) continue; - const species = this.dex.species.get(set.species); - if ((this.ruleTable.isRestrictedSpecies(species) || this.ruleTable.isRestricted(`item:${item.id}`)) && - !((item.megaStone || item.isPrimalOrb) && item.itemUser?.includes(species.baseSpecies))) { - 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/Primal Orb.`, - `(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) { - const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies); - if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) { - // Place volatiles on the Pokémon to show its mega-evolved condition and details - this.add('-start', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]'); - const oSpecies = this.dex.species.get(pokemon.m.originalSpecies); - if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) { - this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - } - } - }, - onSwitchOut(pokemon) { - const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies); - if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) { - this.add('-end', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]'); + onAfterMega(pokemon) { + for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) { + pokemon.removeVolatile(innate); } + pokemon.m.innates = undefined; }, }, @@ -3200,44 +3344,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [ { section: "National Dex Other Tiers", }, - { - name: "[Gen 9] National Dex 35 Pokes", - desc: `Only 35 Pokémon are legal.`, - mod: 'gen9', - searchShow: false, - ruleset: [ - 'Standard NatDex', - '!Species Clause', 'Forme Clause', '!Sleep Clause Mod', 'Sleep Moves Clause', 'Terastal Clause', 'DryPass Clause', 'Mega Rayquaza Clause', - ], - banlist: [ - 'ND Uber', 'ND AG', 'ND OU', 'ND UUBL', 'ND UU', 'ND RUBL', 'ND RU', 'ND NFE', 'ND LC', - 'Battle Bond', 'Moody', 'Power Construct', 'Shadow Tag', 'Tangled Feet', 'Berserk Gene', 'Booster Energy', 'King\'s Rock', 'Quick Claw', - 'Razor Fang', 'Last Respects', 'Shed Tail', 'Baton Pass + Contrary', 'Baton Pass + Rapid Spin', 'Baton Pass + Well-Baked Body', - ], - unbanlist: [ - 'Aerodactyl-Base', 'Arctozolt', 'Armaldo', 'Armarouge', 'Bronzong', 'Centiskorch', 'Cherrim-Base', 'Cyclizar', 'Dhelmise', 'Dondozo', - 'Drakloak', 'Empoleon', 'Glaceon', 'Golduck', 'Gyarados-Base', 'Jellicent', 'Jumpluff', 'Kecleon', 'Kilowattrel', 'Kingdra', 'Lunatone', - 'Musharna', 'Noivern', 'Palossand', 'Pincurchin', 'Reuniclus', 'Revavroom', 'Sandslash-Alola', 'Snorlax', 'Solrock', 'Stonjourner', - 'Vaporeon', 'Virizion', 'Wigglytuff', 'Wo-Chien', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z', 'Yawn', - ], - // Stupid hardcode - onValidateSet(set, format, setHas, teamHas) { - if (set.item) { - const item = this.dex.items.get(set.item); - if (item.megaStone && !(this.ruleTable.has(`+item:${item.id}`) || this.ruleTable.has(`+pokemontag:mega`))) { - return [`Mega Evolution is banned.`]; - } - if (item.zMove && !(this.ruleTable.has(`+item:${item.id}`))) { - return [`${item.name} is banned.`]; - } - } - const species = this.dex.species.get(set.species); - if (set.moves.map(x => this.toID(this.dex.moves.get(x).realMove) || x).includes('hiddenpower') && - species.baseSpecies !== 'Unown' && !this.ruleTable.has(`+move:hiddenpower`)) { - return [`Hidden Power is banned.`]; - } - }, - }, { name: "[Gen 9] National Dex Ubers", mod: 'gen9', @@ -3250,15 +3356,22 @@ export const Formats: import('../sim/dex-formats').FormatList = [ ruleset: ['[Gen 9] National Dex'], banlist: ['ND OU', 'ND UUBL', 'Drizzle', 'Drought', 'Light Clay'], }, + { + name: "[Gen 9] National Dex RU", + mod: 'gen9', + searchShow: false, + ruleset: ['[Gen 9] National Dex UU'], + banlist: ['ND UU', 'ND RUBL', 'Slowbronite'], + }, { name: "[Gen 9] National Dex Ubers UU", mod: 'gen9', searchShow: false, ruleset: ['[Gen 9] National Dex Ubers'], banlist: [ - 'Alomomola', 'Arceus-Normal', 'Arceus-Dark', 'Arceus-Ground', 'Calyrex-Ice', 'Chansey', 'Deoxys-Attack', 'Ditto', 'Dondozo', 'Eternatus', 'Giratina-Origin', 'Groudon-Primal', - 'Hatterene', 'Ho-Oh', 'Kingambit', 'Kyogre-Primal', 'Lunala', 'Marshadow', 'Mewtwo-Mega-Y', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Salamence-Mega', 'Smeargle', 'Yveltal', - 'Zacian-Crowned', 'Zygarde-50%', + 'Alomomola', 'Arceus-Normal', 'Arceus-Dark', 'Arceus-Ground', 'Calyrex-Ice', 'Chansey', 'Deoxys-Attack', 'Deoxys-Speed', 'Ditto', 'Dondozo', 'Eternatus', + 'Giratina-Origin', 'Groudon-Primal', 'Ho-Oh', 'Kyogre-Primal', 'Lunala', 'Marshadow', 'Mewtwo-Mega-Y', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Pheromosa', + 'Salamence-Mega', 'Smeargle', 'Yveltal', 'Zacian-Crowned', 'Zygarde-50%', // UUBL 'Arceus-Dragon', 'Arceus-Fairy', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Ghost', 'Arceus-Water', 'Blaziken-Mega', 'Chi-Yu', 'Chien-Pao', 'Dracovish', 'Flutter Mane', 'Groudon', 'Kyogre', 'Kyurem-Black', 'Rayquaza', 'Shaymin-Sky', 'Zacian', 'Zekrom', 'Power Construct', 'Light Clay', 'Ultranecrozium Z', 'Last Respects', @@ -3356,7 +3469,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [ searchShow: false, ruleset: [ 'Standard AG', 'NatDex Mod', '!Obtainable', - 'Forme Clause', 'Sleep Moves Clause', 'Ability Clause = 2', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', 'Terastal Clause', + 'Forme Clause', 'Sleep Moves Clause', 'Ability Clause = 2', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', 'Terastal Clause', '-Nonexistent', ], banlist: [ 'Cramorant-Gorging', 'Calyrex-Shadow', 'Darmanitan-Galar-Zen', 'Eternatus-Eternamax', 'Greninja-Ash', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Terapagos-Stellar', 'Arena Trap', @@ -3442,7 +3555,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [ { name: "[Gen 8] National Dex Doubles", mod: 'gen8', - // searchShow: false, + searchShow: false, gameType: 'doubles', ruleset: ['Standard Doubles', 'NatDex Mod', 'Evasion Abilities Clause'], banlist: [ @@ -3480,18 +3593,75 @@ export const Formats: import('../sim/dex-formats').FormatList = [ section: "Pet Mods", }, { - name: "[Gen 6] Megas Revisited", // Roomtours - desc: `A Gen 6 metagame where every Mega Evolution was reevaluated and redesigned.`, - mod: 'gen6megasrevisited', + name: "[Gen 9] ReGeneration", // Roomtours + desc: `A Kanto-only Gen 9 metagame where many of the Pokemon have been redesigned with modern design philosophies.`, + mod: 'gen9regeneration', searchShow: false, - ruleset: ['Standard', 'Mega Data Mod'], - banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'Soul Dew', 'Baton Pass', 'Swagger', 'Blaziken + Speed Boost'], + ruleset: ['Standard NatDex', 'Terastal Clause', 'Data Preview'], + banlist: [ + 'Arena Trap', 'Moody', 'Shadow Tag', 'Baton Pass', + 'Aerodactylite', 'Alakazite', 'Beedrillite', 'Blastoisinite', 'Charizardite X', 'Charizardite Y', 'Gyaradosite', + 'Gengarite', 'Kangaskhanite', 'Mewtwonite X', 'Mewtwonite Y', 'Pidgeotite', 'Pinsirite', 'Slowbronite', 'Venusaurite', + ], onBegin() { - this.add(`raw|
Need help with all of the new Megas and abilities?
Then make sure to check out the spreadsheet or use /dt!
`); - this.add('-message', `Welcome to Megas Revisited!`); - this.add('-message', `This is a Generation 6 OU-based Pet Mod where every existing Mega Evolution has been redesigned.`); + this.add(`raw|
Need help with all of the new moves and abilities?
Then make sure to check out the spreadsheet or use /dt!
`); + this.add('-message', `Welcome to ReGeneration!`); + this.add('-message', `This is a Generation 9 Pet Mod where many Kanto Pokemon have been redesigned to fit the modern era!`); this.add('-message', `You can find our thread and metagame resources here:`); - this.add('-message', `https://www.smogon.com/forums/threads/3713949/`); + this.add('-message', `https://www.smogon.com/forums/threads/3718196/`); + }, + onValidateSet(set, format) { + const species = this.dex.species.get(set.species || set.name); + if (species.num >= 152 && !this.ruleTable.has('+' + species.id)) { + return [`${species.baseSpecies} is not in the Kanto Pokédex.`]; + } + }, + }, + { + name: "[Gen 9] CCAPM2025", // roomtours + desc: `A Gen 9 metagame created in the Pet Mods Room featuring Pokemon with new form changes.`, + mod: 'ccapm2025', + searchShow: false, + ruleset: ['Standard NatDex', 'Sleep Moves Clause', '!Sleep Clause Mod', 'CCAPM Form Changes', 'Terastal Clause', 'Data Preview'], + banlist: [ + 'Uber', 'AG', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', + 'Baton Pass', 'Last Respects', 'Shed Tail', 'Mewtwo', 'Rayquaza', + ], + onBegin() { + this.add(`raw|
Need help with all of the wacky new forms, moves, items, and abilities?
Then make sure to check out the spreadsheet or use /dt!
`); + this.add('-message', `Welcome to Commuity Create-A-Pet Mod 2025!`); + this.add('-message', `This is a Generation 9 Pet Mod where every Pokemon has a new form change!`); + this.add('-message', `You can find our thread and metagame resources here:`); + this.add('-message', `https://www.smogon.com/forums/threads/3773591/`); + this.add('-message', `This metagame was created last year in the Pet Mods Room here on Showdown!`); + this.add('-message', `Be sure to swing by to discuss the metagame and participate in events like CCAPM:`); + this.add('-message', `https://play.pokemonshowdown.com/petmods`); + }, + onValidateSet(set) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) { + const { tierSpecies } = this.getValidationSpecies(set); + if (tierSpecies.isNonstandard !== "CAP") + return [`${set.name || set.species} does not exist in Pet Mods Advent.`]; + }; + }, + }, + { + name: "[Gen 9] ChatBats", + desc: `A Random Battles Solomod made by the Pet Mods chatroom on Showdown.`, + mod: 'chatbats', + searchShow: false, + team: 'randomChatBats', + ruleset: ['Obtainable', 'Species Clause', 'HP Percentage Mod', 'Sleep Clause Mod', 'Data Preview', 'Cancel Mod'], + onSwitchIn(pokemon) { + this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); + }, + // Dachsbun causes Koraidon to generate on enemy team. Implemented here. + onBegin() { + this.add(`raw|
Need help with all of the new moves, abilities, and wacky sets?
Then make sure to check out the ChatBats Compendium or use /dt!
`); + this.add(`raw|Welcome to ChatBats!`); + this.add(`raw|ChatBats is a Random Battles format created by the Pet Mods room here on Showdown!`); + this.add(`raw|If you want to help create new sets, we will host events periodically in the Pet Mods room!`); + this.add(`raw|Anyone who is there can help create a new set for a random mon, changing moves, abilities, stats, and even custom formes.`); }, }, { @@ -3524,7 +3694,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [ name: "[Gen 9] Super Staff Bros Ultimate", desc: "The fifth iteration of Super Staff Bros is here! Battle with a random team of pokemon created by the sim staff.", mod: 'gen9ssb', - debug: true, team: 'randomStaffBros', bestOfDefault: true, ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], @@ -3625,6 +3794,16 @@ export const Formats: import('../sim/dex-formats').FormatList = [ } }, }, + { + name: "[Gen 9] Live Patch Battles Ver 1.0.0", + threads: [`• https://twitter.com/pokemonpatches`], + mod: 'afd', + team: 'random', + ruleset: ['[Gen 9] Random Battle'], + onBegin() { + this.add(`raw|`); + }, + }, { name: "[Gen 9] Battle Factory", desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`, @@ -4418,7 +4597,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [ mod: 'gen8bdsp', gameType: 'doubles', searchShow: false, - ruleset: ['Standard Doubles'], + ruleset: ['Standard Doubles', 'Evasion Abilities Clause', 'Evasion Items Clause'], banlist: ['DUber', 'Dark Void'], }, { @@ -4672,6 +4851,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [ ruleset: ['[Gen 6] UU'], banlist: ['UU', 'RUBL'], }, + { + name: "[Gen 6] NU", + mod: 'gen6', + searchShow: false, + ruleset: ['[Gen 6] RU'], + banlist: ['RU', 'NUBL'], + }, { name: "[Gen 6] PU", mod: 'gen6', @@ -4837,12 +5023,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [ section: "B2/W2 Singles", column: 4, }, - { - name: "[Gen 5] Ubers", - mod: 'gen5', - searchShow: false, - ruleset: ['Standard', 'Sleep Clause Mod'], - }, { name: "[Gen 5] UU", mod: 'gen5', @@ -4920,17 +5100,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [ mod: 'gen5', searchShow: false, ruleset: ['[Gen 5] PU'], - banlist: [ - // PU - 'Audino', 'Banette', 'Beheeyem', 'Bronzor', 'Dodrio', 'Duosion', 'Dwebble', 'Fraxure', 'Gabite', 'Golduck', - 'Huntail', 'Jumpluff', 'Klang', 'Krokorok', 'Mantine', 'Maractus', 'Mawile', 'Monferno', 'Murkrow', 'Natu', - 'Purugly', 'Rampardos', 'Rapidash', 'Relicanth', 'Scraggy', 'Shiftry', 'Simisage', 'Sneasel', 'Stoutland', - 'Stunfisk', 'Swanna', 'Swoobat', 'Tentacool', 'Torterra', 'Ursaring', 'Victreebel', 'Vileplume', 'Volbeat', - 'Zebstrika', 'Zweilous', - // ZUBL - 'Articuno', 'Dragonair', 'Glalie', 'Machoke', 'Marowak', 'Omanyte', 'Regigigas', 'Trubbish', 'Whirlipede', - 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Baton Pass', - ], + banlist: ['PU', 'ZUBL', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Baton Pass'], unbanlist: ['Damp Rock'], }, { @@ -5020,6 +5190,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [ section: "DPP Singles", column: 4, }, + { + name: "[Gen 4] Ubers", + mod: 'gen4', + searchShow: false, + ruleset: ['Standard'], + banlist: ['AG'], + }, { name: "[Gen 4] UU", mod: 'gen4', @@ -5080,25 +5257,14 @@ export const Formats: import('../sim/dex-formats').FormatList = [ 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', - ], + banlist: ['NU', 'PUBL'], }, { name: "[Gen 4] ZU", mod: 'gen4', searchShow: false, ruleset: ['[Gen 4] PU'], - banlist: [ - 'Ampharos', 'Armaldo', 'Bellossom', 'Dragonair', 'Electabuzz', 'Gabite', 'Gastrodon', 'Glaceon', 'Glalie', - 'Golduck', 'Gorebyss', 'Hippopotas', 'Kadabra', 'Kingler', 'Lapras', 'Machoke', 'Magmar', 'Mantine', 'Marowak', - 'Metang', 'Misdreavus', 'Monferno', 'Mr. Mime', 'Muk', 'Murkrow', 'Pinsir', 'Politoed', 'Purugly', 'Quagsire', - 'Raichu', 'Rampardos', 'Rapidash', 'Regigigas', 'Relicanth', 'Rhydon', 'Scyther', 'Sneasel', 'Snover', - 'Solrock', 'Tangela', 'Torkoal', 'Victreebel', 'Xatu', 'Walrein', 'Zangoose', 'Damp Rock', - ], + banlist: ['PU', 'ZUBL', 'Damp Rock'], }, { name: "[Gen 4] Custom Game", diff --git a/data/abilities.ts b/data/abilities.ts index af08736f37..831808250c 100644 --- a/data/abilities.ts +++ b/data/abilities.ts @@ -142,15 +142,10 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { }, angershell: { onDamage(damage, target, source, effect) { - if ( - effect.effectType === "Move" && - !effect.multihit && + this.effectState.checkedAngerShell = !( + effect.effectType === "Move" && !effect.multihit && !(effect.hasSheerForce && source.hasAbility('sheerforce')) - ) { - this.effectState.checkedAngerShell = false; - } else { - this.effectState.checkedAngerShell = true; - } + ); }, onTryEatItem(item) { const healingItems = [ @@ -408,15 +403,10 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { }, berserk: { onDamage(damage, target, source, effect) { - if ( - effect.effectType === "Move" && - !effect.multihit && + this.effectState.checkedBerserk = !( + effect.effectType === "Move" && !effect.multihit && !(effect.hasSheerForce && source.hasAbility('sheerforce')) - ) { - this.effectState.checkedBerserk = false; - } else { - this.effectState.checkedBerserk = true; - } + ); }, onTryEatItem(item) { const healingItems = [ @@ -1053,7 +1043,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { flags: {}, name: "Dragonize", rating: 4, - num: 312, // TODO confirm + num: 312, }, dragonsmaw: { onModifyAtkPriority: 5, @@ -1111,7 +1101,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { } }, onWeather(target, source, effect) { - if (target.hasItem('utilityumbrella')) return; + if (target.effectiveWeather() !== effect.id) return; if (effect.id === 'raindance' || effect.id === 'primordialsea') { this.heal(target.baseMaxhp / 8); } else if (effect.id === 'sunnyday' || effect.id === 'desolateland') { @@ -1146,14 +1136,14 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { }, effectspore: { onDamagingHit(damage, target, source, move) { - if (this.checkMoveMakesContact(move, source, target) && !source.status && source.runStatusImmunity('powder')) { + if (this.checkMoveMakesContact(move, source, target) && source.runStatusImmunity('powder')) { const r = this.random(100); if (r < 11) { - source.setStatus('slp', target); + source.trySetStatus('slp', target); } else if (r < 21) { - source.setStatus('par', target); + source.trySetStatus('par', target); } else if (r < 30) { - source.setStatus('psn', target); + source.trySetStatus('psn', target); } } }, @@ -2536,10 +2526,16 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { }, megasol: { isNonstandard: "Future", + onWeatherModifyDamage(damage, attacker, defender, move) { + if (this.field.weather !== 'sunnyday') { + (this.dex.conditions.getByID('sunnyday' as ID) as any).onWeatherModifyDamage + .call(this, damage, attacker, defender, move); + } + }, flags: {}, name: "Mega Sol", rating: 3, - num: 311, // TODO confirm + num: 315, // Partially implemented in Pokemon.effectiveWeather() in sim/pokemon.ts }, merciless: { @@ -3252,6 +3248,20 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { rating: 0.5, num: 53, }, + piercingdrill: { + isNonstandard: "Future", + onHitProtect(source, target, move) { + if (move.flags['contact']) { + target.getMoveHitData(move).bypassProtect = this.effect; + return false; + } + }, + // breaking protect handled in Battle#checkMoveBypassesProtect() + flags: {}, + name: "Piercing Drill", + rating: 1, + num: 311, + }, pixilate: { onModifyTypePriority: -1, onModifyType(move, pokemon) { @@ -3717,7 +3727,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { }, raindish: { onWeather(target, source, effect) { - if (target.hasItem('utilityumbrella')) return; + if (target.effectiveWeather() !== effect.id) return; if (effect.id === 'raindance' || effect.id === 'primordialsea') { this.heal(target.baseMaxhp / 16); } @@ -4160,7 +4170,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { }, sheerforce: { onModifyMove(move, pokemon) { - if (move.secondaries) { + if (move.secondaries && !move.hasSheerForceBoost) { delete move.secondaries; // Technically not a secondary effect, but it is negated delete move.self; @@ -4171,7 +4181,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { }, onBasePowerPriority: 21, onBasePower(basePower, pokemon, target, move) { - if (move.hasSheerForce) return this.chainModify([5325, 4096]); + if (move.hasSheerForce || move.hasSheerForceBoost) return this.chainModify([5325, 4096]); }, flags: {}, name: "Sheer Force", @@ -4360,7 +4370,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { } }, onWeather(target, source, effect) { - if (target.hasItem('utilityumbrella')) return; + if (target.effectiveWeather() !== effect.id) return; if (effect.id === 'sunnyday' || effect.id === 'desolateland') { this.damage(target.baseMaxhp / 8, target, target); } @@ -4422,6 +4432,16 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = { rating: 4.5, num: 3, }, + spicyspray: { + isNonstandard: "Future", + onDamagingHit(damage, target, source, move) { + source.trySetStatus('brn', target); + }, + flags: {}, + name: "Spicy Spray", + rating: 3, + num: 318, + }, stakeout: { onModifyAtkPriority: 5, onModifyAtk(atk, attacker, defender) { diff --git a/data/aliases.ts b/data/aliases.ts index d5bd11694f..8f8d290bee 100644 --- a/data/aliases.ts +++ b/data/aliases.ts @@ -15,9 +15,11 @@ export const Aliases: import('../sim/dex').AliasesTable = { zeroused: "[Gen 9] ZU", mono: "[Gen 9] Monotype", ag: "[Gen 9] Anything Goes", - bss: "[Gen 9] BSS Reg J", - vgc: "[Gen 9] VGC 2026 Reg F", - bsd: "[Gen 9] VGC 2026 Reg F", + champsou: "[Gen 9 Champions] OU", + cou: "[Gen 9 Champions] OU", + bss: "[Gen 9 Champions] BSS Reg M-A", + vgc: "[Gen 9 Champions] VGC 2026 Reg M-A", + bsd: "[Gen 9 Champions] VGC 2026 Reg M-A", randdubs: "[Gen 9] Random Doubles Battle", doubles: "[Gen 9] Doubles OU", dou: "[Gen 9] Doubles OU", @@ -91,10 +93,10 @@ export const Aliases: import('../sim/dex').AliasesTable = { zaou: "[Gen 9] Legends Z-A OU", legendsou: "[Gen 9] Legends Z-A OU", plzaou: "[Gen 9] Legends Z-A OU", - omotm: "[Gen 9] Linked", - lcotm: "[Gen 9] 350 Cup", - ommotm: "[Gen 9] Pokebilities AAA", - ommspotlight: "[Gen 9] Pokebilities AAA", + omotm: "[Gen 9] Alphabet Cup", + lcotm: "[Gen 9] Cross Evolution", + ommotm: "[Gen 9] STAAABmons", + ommspotlight: "[Gen 9] STAAABmons", // mega evos --- 1st ordered alphabetically by species, 2nd by alias megasnow: "Abomasnow-Mega", diff --git a/data/conditions.ts b/data/conditions.ts index cf749e1f66..9d6ee15ca2 100644 --- a/data/conditions.ts +++ b/data/conditions.ts @@ -484,7 +484,7 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = { return 5; }, onWeatherModifyDamage(damage, attacker, defender, move) { - if (defender.hasItem('utilityumbrella')) return; + if (defender.effectiveWeather() !== 'raindance') return; if (move.type === 'Water') { this.debug('rain water boost'); return this.chainModify(1.5); @@ -525,7 +525,7 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = { } }, onWeatherModifyDamage(damage, attacker, defender, move) { - if (defender.hasItem('utilityumbrella')) return; + if (defender.effectiveWeather() !== 'primordialsea') return; if (move.type === 'Water') { this.debug('Rain water boost'); return this.chainModify(1.5); @@ -554,11 +554,11 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = { return 5; }, onWeatherModifyDamage(damage, attacker, defender, move) { - if (move.id === 'hydrosteam' && !attacker.hasItem('utilityumbrella')) { + if (move.id === 'hydrosteam' && attacker.effectiveWeather() === 'sunnyday') { this.debug('Sunny Day Hydro Steam boost'); return this.chainModify(1.5); } - if (defender.hasItem('utilityumbrella')) return; + if (defender.effectiveWeather() !== 'sunnyday') return; if (move.type === 'Fire') { this.debug('Sunny Day fire boost'); return this.chainModify(1.5); @@ -577,7 +577,7 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = { } }, onImmunity(type, pokemon) { - if (pokemon.hasItem('utilityumbrella')) return; + if (pokemon.effectiveWeather() !== 'sunnyday') return; if (type === 'frz') return false; }, onFieldResidualOrder: 1, @@ -603,9 +603,9 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = { } }, onWeatherModifyDamage(damage, attacker, defender, move) { - if (defender.hasItem('utilityumbrella')) return; + if (defender.effectiveWeather() !== 'desolateland') return; if (move.type === 'Fire') { - this.debug('Sunny Day fire boost'); + this.debug('Desolate Land fire boost'); return this.chainModify(1.5); } }, @@ -613,7 +613,7 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = { this.add('-weather', 'DesolateLand', '[from] ability: ' + effect.name, `[of] ${source}`); }, onImmunity(type, pokemon) { - if (pokemon.hasItem('utilityumbrella')) return; + if (pokemon.effectiveWeather() !== 'desolateland') return; if (type === 'frz') return false; }, onFieldResidualOrder: 1, @@ -894,11 +894,12 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = { const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead'); if (ironHeadIndex >= 0) { const move = this.dex.moves.get('behemothblade'); + const pp = this.calculatePP(move, pokemon.ppUps[ironHeadIndex]); pokemon.baseMoveSlots[ironHeadIndex] = { move: move.name, id: move.id, - pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, - maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, + pp, + maxpp: pp, target: move.target, disabled: false, disabledSource: '', @@ -923,11 +924,12 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = { const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead'); if (ironHeadIndex >= 0) { const move = this.dex.moves.get('behemothbash'); + const pp = this.calculatePP(move, pokemon.ppUps[ironHeadIndex]); pokemon.baseMoveSlots[ironHeadIndex] = { move: move.name, id: move.id, - pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, - maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, + pp, + maxpp: pp, target: move.target, disabled: false, disabledSource: '', diff --git a/data/formats-data.ts b/data/formats-data.ts index 499e991f05..956c904f36 100644 --- a/data/formats-data.ts +++ b/data/formats-data.ts @@ -101,7 +101,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = beedrillmega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "UU", + natDexTier: "RU", }, pidgey: { isNonstandard: "Past", @@ -381,7 +381,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "NFE", }, vileplume: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -464,7 +464,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "LC", }, primeape: { - tier: "ZU", + tier: "NFE", doublesTier: "NFE", natDexTier: "NFE", }, @@ -475,7 +475,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "LC", }, arcanine: { - tier: "PU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -613,7 +613,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = slowbro: { tier: "RU", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "OU", }, slowbromega: { isNonstandard: "Past", @@ -621,7 +621,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "RUBL", }, slowbrogalar: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1116,7 +1116,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "NFE", }, porygon2: { - tier: "ZUBL", + tier: "PU", doublesTier: "DUU", natDexTier: "NFE", }, @@ -1159,7 +1159,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "LC", }, snorlax: { - tier: "ZU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1194,7 +1194,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = }, moltresgalar: { tier: "UUBL", - doublesTier: "DUU", + doublesTier: "DOU", natDexTier: "RUBL", }, dratini: { @@ -1228,7 +1228,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "Uber", }, mew: { - tier: "RU", + tier: "UU", doublesTier: "DUU", natDexTier: "UU", }, @@ -1316,7 +1316,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "LC", }, lanturn: { - tier: "ZU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -1521,17 +1521,19 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "RU", }, heracross: { - tier: "PUBL", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, heracrossmega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "UU", + natDexTier: "RUBL", }, sneasel: { - tier: "NFE", + tier: "ZU", + doublesTier: "NFE", + natDexTier: "NFE", }, sneaselhisui: { tier: "ZU", @@ -1557,7 +1559,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = ursaluna: { tier: "UUBL", doublesTier: "DOU", - natDexTier: "UU", + natDexTier: "RUBL", }, ursalunabloodmoon: { tier: "Uber", @@ -1579,7 +1581,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "NFE", }, mamoswine: { - tier: "RUBL", + tier: "UU", doublesTier: "(DUU)", natDexTier: "RUBL", }, @@ -1700,7 +1702,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tyranitarmega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "UUBL", + natDexTier: "OU", }, lugia: { tier: "Uber", @@ -1758,7 +1760,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = swampert: { tier: "NU", doublesTier: "(DUU)", - natDexTier: "RU", + natDexTier: "UU", }, swampertmega: { isNonstandard: "Past", @@ -1860,7 +1862,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = }, pelipper: { tier: "UUBL", - doublesTier: "DOU", + doublesTier: "DUU", natDexTier: "RU", }, ralts: { @@ -1877,11 +1879,11 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = gardevoirmega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RUBL", + natDexTier: "UU", }, gallade: { tier: "RU", - doublesTier: "(DUU)", + doublesTier: "DUU", natDexTier: "RU", }, gallademega: { @@ -1980,7 +1982,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = sableyemega: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RUBL", + natDexTier: "UU", }, mawile: { isNonstandard: "Past", @@ -2701,7 +2703,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "LC", }, skuntank: { - tier: "PU", + tier: "ZU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2838,12 +2840,12 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "RU", }, rotommow: { - tier: "ZU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, uxie: { - tier: "PU", + tier: "NU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -2926,7 +2928,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "Illegal", }, shaymin: { - tier: "ZU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -3136,7 +3138,9 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "LC", }, gurdurr: { - tier: "NFE", + tier: "ZU", + doublesTier: "NFE", + natDexTier: "NFE", }, conkeldurr: { tier: "UU", @@ -3290,7 +3294,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "NFE", }, scrafty: { - tier: "NU", + tier: "PU", doublesTier: "DUU", natDexTier: "RU", }, @@ -3593,7 +3597,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "LC", }, mienshao: { - tier: "RU", + tier: "RUBL", doublesTier: "(DUU)", natDexTier: "RUBL", }, @@ -3646,7 +3650,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = mandibuzz: { tier: "UU", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "RU", }, heatmor: { isNonstandard: "Past", @@ -3665,7 +3669,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "NFE", }, hydreigon: { - tier: "RUBL", + tier: "UU", doublesTier: "(DUU)", natDexTier: "UU", }, @@ -3683,7 +3687,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "RU", }, terrakion: { - tier: "NUBL", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RUBL", }, @@ -3848,7 +3852,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "NFE", }, talonflame: { - tier: "RU", + tier: "UU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4197,7 +4201,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = }, hoopaunbound: { tier: "UUBL", - doublesTier: "(DUU)", + doublesTier: "DUU", natDexTier: "UUBL", }, volcanion: { @@ -4241,7 +4245,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = primarina: { tier: "OU", doublesTier: "DOU", - natDexTier: "UU", + natDexTier: "RU", }, pikipek: { tier: "LC", @@ -4294,7 +4298,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "Illegal", }, oricorio: { - tier: "ZU", + tier: "ZUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4304,7 +4308,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "RU", }, oricoriopau: { - tier: "ZU", + tier: "ZUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4342,7 +4346,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "RU", }, lycanrocdusk: { - tier: "RU", + tier: "NUBL", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4448,7 +4452,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "RU", }, passimian: { - tier: "ZU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4460,7 +4464,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = golisopod: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "UU", + natDexTier: "RU", }, golisopodmega: { isNonstandard: "Future", @@ -4717,7 +4721,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "RU", }, necrozma: { - tier: "NUBL", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -4777,7 +4781,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = zeraora: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "RU", + natDexTier: "UU", }, zeraoramega: { isNonstandard: "Future", @@ -4801,14 +4805,14 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "LC", }, thwackey: { - tier: "NU", + tier: "NUBL", doublesTier: "NFE", natDexTier: "NFE", }, rillaboom: { tier: "OU", doublesTier: "DOU", - natDexTier: "UU", + natDexTier: "OU", }, rillaboomgmax: { isNonstandard: "Past", @@ -4998,7 +5002,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "LC", }, barraskewda: { - tier: "NU", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5006,7 +5010,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = tier: "LC", }, toxtricity: { - tier: "NU", + tier: "RU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5154,7 +5158,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = dracozolt: { isNonstandard: "Past", tier: "Illegal", - natDexTier: "UU", + natDexTier: "RU", }, arctozolt: { isNonstandard: "Past", @@ -5351,7 +5355,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = lokix: { tier: "UU", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "RU", }, rellor: { tier: "LC", @@ -5374,7 +5378,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = }, espathra: { tier: "Uber", - doublesTier: "(DUU)", + doublesTier: "DUber", natDexTier: "Uber", }, wiglett: { @@ -5548,7 +5552,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = garganacl: { tier: "OU", doublesTier: "DUU", - natDexTier: "UU", + natDexTier: "RU", }, glimmet: { tier: "LC", @@ -5556,7 +5560,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = glimmora: { tier: "OU", doublesTier: "DOU", - natDexTier: "RU", + natDexTier: "UU", }, glimmoramega: { isNonstandard: "Future", @@ -5686,7 +5690,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "Uber", }, wochien: { - tier: "NU", + tier: "PU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5727,7 +5731,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = ceruledge: { tier: "OU", doublesTier: "(DUU)", - natDexTier: "UUBL", + natDexTier: "OU", }, toedscool: { tier: "LC", @@ -5772,7 +5776,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = }, okidogi: { tier: "UUBL", - doublesTier: "(DUU)", + doublesTier: "DOU", natDexTier: "UUBL", }, munkidori: { @@ -5786,7 +5790,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = natDexTier: "RU", }, ogerpon: { - tier: "UU", + tier: "OU", doublesTier: "(DUU)", natDexTier: "RU", }, @@ -5828,7 +5832,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = ironboulder: { tier: "UUBL", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "RUBL", }, ironcrown: { tier: "OU", @@ -5848,7 +5852,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable = pecharunt: { tier: "OU", doublesTier: "(DUU)", - natDexTier: "UU", + natDexTier: "UUBL", }, missingno: { isNonstandard: "Custom", diff --git a/data/items.ts b/data/items.ts index b232f73d88..024f5bda0a 100644 --- a/data/items.ts +++ b/data/items.ts @@ -45,7 +45,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, absolitez: { name: "Absolite Z", - spritenum: 576, + spritenum: 499, megaStone: { "Absol": "Absol-Mega-Z" }, itemUser: ["Absol"], onTakeItem(item, source) { @@ -402,7 +402,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, baxcalibrite: { name: "Baxcalibrite", - spritenum: 0, + spritenum: 514, megaStone: { "Baxcalibur": "Baxcalibur-Mega" }, itemUser: ["Baxcalibur"], onTakeItem(item, source) { @@ -937,7 +937,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, chimechite: { name: "Chimechite", - spritenum: 0, + spritenum: 498, megaStone: { "Chimecho": "Chimecho-Mega" }, itemUser: ["Chimecho"], onTakeItem(item, source) { @@ -1213,7 +1213,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, crabominite: { name: "Crabominite", - spritenum: 0, + spritenum: 507, megaStone: { "Crabominable": "Crabominable-Mega" }, itemUser: ["Crabominable"], onTakeItem(item, source) { @@ -1310,7 +1310,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, darkranite: { name: "Darkranite", - spritenum: 0, + spritenum: 504, megaStone: { "Darkrai": "Darkrai-Mega" }, itemUser: ["Darkrai"], onTakeItem(item, source) { @@ -2412,7 +2412,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, garchompitez: { name: "Garchompite Z", - spritenum: 573, + spritenum: 501, megaStone: { "Garchomp": "Garchomp-Mega-Z" }, itemUser: ["Garchomp"], onTakeItem(item, source) { @@ -2502,7 +2502,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, glimmoranite: { name: "Glimmoranite", - spritenum: 0, + spritenum: 512, megaStone: { "Glimmora": "Glimmora-Mega" }, itemUser: ["Glimmora"], onTakeItem(item, source) { @@ -2523,7 +2523,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, golisopite: { name: "Golisopite", - spritenum: 0, + spritenum: 508, megaStone: { "Golisopod": "Golisopod-Mega" }, itemUser: ["Golisopod"], onTakeItem(item, source) { @@ -2535,7 +2535,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, golurkite: { name: "Golurkite", - spritenum: 0, + spritenum: 505, megaStone: { "Golurk": "Golurk-Mega" }, itemUser: ["Golurk"], onTakeItem(item, source) { @@ -2823,7 +2823,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, heatranite: { name: "Heatranite", - spritenum: 0, + spritenum: 503, megaStone: { "Heatran": "Heatran-Mega" }, itemUser: ["Heatran"], onTakeItem(item, source) { @@ -3362,8 +3362,8 @@ export const Items: import('../sim/dex-items').ItemDataTable = { const moveSlot = pokemon.moveSlots.find(move => move.pp === 0) || pokemon.moveSlots.find(move => move.pp < move.maxpp); if (!moveSlot) return; - moveSlot.pp += 10; - if (moveSlot.pp > moveSlot.maxpp) moveSlot.pp = moveSlot.maxpp; + const addedPP = pokemon.hasAbility('ripen') ? 20 : 10; + moveSlot.pp = Math.min(moveSlot.pp + addedPP, moveSlot.maxpp); this.add('-activate', pokemon, 'item: Leppa Berry', moveSlot.move, '[consumed]'); }, num: 154, @@ -3503,7 +3503,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, lucarionitez: { name: "Lucarionite Z", - spritenum: 594, + spritenum: 502, megaStone: { "Lucario": "Lucario-Mega-Z" }, itemUser: ["Lucario"], onTakeItem(item, source) { @@ -3658,7 +3658,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, magearnite: { name: "Magearnite", - spritenum: 0, + spritenum: 509, megaStone: { "Magearna": "Magearna-Mega", "Magearna-Original": "Magearna-Original-Mega", @@ -3921,7 +3921,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, meowsticite: { name: "Meowsticite", - spritenum: 0, + spritenum: 506, megaStone: { "Meowstic": "Meowstic-M-Mega", "Meowstic-F": "Meowstic-F-Mega", @@ -5029,7 +5029,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, raichunitex: { name: "Raichunite X", - spritenum: 0, + spritenum: 496, megaStone: { "Raichu": "Raichu-Mega-X" }, itemUser: ["Raichu"], onTakeItem(item, source) { @@ -5041,7 +5041,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, raichunitey: { name: "Raichunite Y", - spritenum: 0, + spritenum: 497, megaStone: { "Raichu": "Raichu-Mega-Y" }, itemUser: ["Raichu"], onTakeItem(item, source) { @@ -5560,7 +5560,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, scovillainite: { name: "Scovillainite", - spritenum: 0, + spritenum: 511, megaStone: { "Scovillain": "Scovillain-Mega" }, itemUser: ["Scovillain"], onTakeItem(item, source) { @@ -5971,7 +5971,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, staraptite: { name: "Staraptite", - spritenum: 0, + spritenum: 500, megaStone: { "Staraptor": "Staraptor-Mega" }, itemUser: ["Staraptor"], onTakeItem(item, source) { @@ -6260,7 +6260,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, tatsugirinite: { name: "Tatsugirinite", - spritenum: 0, + spritenum: 513, megaStone: { "Tatsugiri": "Tatsugiri-Curly-Mega", "Tatsugiri-Droopy": "Tatsugiri-Droopy-Mega", @@ -7807,7 +7807,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = { }, zeraorite: { name: "Zeraorite", - spritenum: 0, + spritenum: 510, megaStone: { "Zeraora": "Zeraora-Mega" }, itemUser: ["Zeraora"], onTakeItem(item, source) { diff --git a/data/learnsets.ts b/data/learnsets.ts index 717977dcf2..221e42655a 100644 --- a/data/learnsets.ts +++ b/data/learnsets.ts @@ -86373,8 +86373,8 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = { zenheadbutt: ["9M", "8M"], }, eventData: [ - {generation: 8, level: 10, perfectIVs: 3, moves: ["rocksmash", "leer", "endure", "focusenergy"]}, - {generation: 9, level: 30, moves: ["detect", "brickbreak", "headbutt", "scaryface"]}, + {generation: 8, level: 10, perfectIVs: 3, moves: ["rocksmash", "leer", "endure", "focusenergy"], pokeball: "pokeball"}, + {generation: 9, level: 30, moves: ["scaryface", "headbutt", "brickbreak", "detect"]}, ], eventOnly: true, }, diff --git a/data/mods/afd/abilities.ts b/data/mods/afd/abilities.ts new file mode 100644 index 0000000000..f86b718bd7 --- /dev/null +++ b/data/mods/afd/abilities.ts @@ -0,0 +1,231 @@ +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + chaossaliva: { + onSourceDamagingHit(damage, target, source, move) { + // Despite not being a secondary, Shield Dust / Covert Cloak block Poison Touch's effect + if (target.hasAbility('shielddust') || target.hasItem('covertcloak')) return; + if (this.checkMoveMakesContact(move, target, source)) { + if (this.randomChance(2, 10)) { + target.trySetStatus('par', source); + } + if (this.randomChance(2, 10)) { + target.addVolatile('confusion', source); + } + } + }, + flags: {}, + name: "Chaos Saliva", + gen: 9, + shortDesc: "Contact moves have a 20% chance to paralyze and a 20% chance to confuse.", + }, + faststart: { + onStart(pokemon) { + this.add('-start', pokemon, 'ability: Fast Start'); + this.effectState.counter = 5; + }, + onResidualOrder: 28, + onResidualSubOrder: 2, + onResidual(pokemon) { + if (pokemon.activeTurns && this.effectState.counter) { + this.effectState.counter--; + if (!this.effectState.counter) { + this.add('-end', pokemon, 'Fast Start'); + delete this.effectState.counter; + } + } + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, pokemon) { + if (this.effectState.counter) { + return this.chainModify(2); + } + }, + onModifySpe(spe, pokemon) { + if (this.effectState.counter) { + return this.chainModify(2); + } + }, + onEnd(pokemon) { + if (pokemon.beingCalledBack) return; + this.add('-end', pokemon, 'Fast Start', '[silent]'); + }, + flags: {}, + name: "Fast Start", + rating: -1, + gen: 9, + }, + ironfist: { + inherit: true, + onBasePower(basePower, attacker, defender, move) { + if (move.flags['punch']) { + this.debug('Iron Fist boost'); + return this.chainModify([8192, 4096]); + } + }, + }, + supermegalauncher: { + onBasePowerPriority: 19, + onBasePower(basePower, attacker, defender, move) { + if (move.flags['pulse']) { + return this.chainModify(4); + } + }, + flags: {}, + name: "Mega Launcher", + desc: "This Pokemon's pulse moves have their power multiplied by 4. Heal Pulse restores 8/4 of a target's maximum HP, rounded half down.", + shortDesc: "This Pokemon's pulse moves have 4x power. Heal Pulse heals 8/4 target's max HP.", + rating: 3, + gen: 9, + }, + discourage: { + onStart(pokemon) { + let activated = false; + for (const target of pokemon.adjacentFoes()) { + if (!activated) { + this.add('-ability', pokemon, 'Discourage', 'boost'); + activated = true; + } + if (target.volatiles['substitute']) { + this.add('-immune', target); + } else { + this.boost({ spa: -1 }, target, pokemon, null, true); + } + } + }, + flags: {}, + name: "Discourage", + rating: 3.5, + num: 999, + gen: 9, + }, + adaptability: { + inherit: true, + onModifySTAB(stab, source, target, move) { + if (move.forceSTAB || source.hasType(move.type)) { + const types = source.getTypes(); + if (types[0] === move.type) return 2.3; + if (types[1] && types[1] === move.type) return 1.6; + if (stab === 2.3) { + return 2.55; + } + return 2.7; + } + }, + }, + icebody: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (this.checkMoveMakesContact(move, source, target)) { + if (this.randomChance(1, 10)) { + source.trySetStatus('frz', target); + } + } + }, + }, + noretreat: { + onStart(target) { + this.add('-start', target, 'move: No Retreat'); + }, + onFoeBeforeSwitchOut(pokemon) { + if (!pokemon || pokemon.fainted || pokemon.hp <= 0 || pokemon.hasAbility('noretreat')) return; + const success = !!this.damage(pokemon.maxhp / 4, pokemon, this.effectState.target); + if (success) { + pokemon.tryTrap(); + } + }, + name: "No Retreat", + flags: { breakable: 1 }, + }, + itsexcadrillintime: { + onModifySpe(spe, pokemon) { + if (this.field.isWeather('sandstorm')) { + return this.chainModify(2); + } + }, + onImmunity(type, pokemon) { + if (type === 'sandstorm') return false; + }, + onBasePowerPriority: 21, + onBasePower(basePower, attacker, defender, move) { + if (this.field.isWeather('sandstorm')) { + if (move.type === 'Rock' || move.type === 'Ground' || move.type === 'Steel') { + this.debug('Sand Force boost'); + return this.chainModify([5325, 4096]); + } + } + }, + name: "It's Excadrillin' Time!", + flags: {}, + }, + goodasgold: { + inherit: true, + onTryHit(target, source, move) { + if (move.category !== 'Special' && target !== source) { + this.add('-immune', target, '[from] ability: Good as Gold'); + return null; + } + }, + }, + intimidate2: { + onStart(pokemon) { + let activated = false; + let timesActivated = 0; + for (const target of pokemon.adjacentFoes()) { + if (!activated) { + this.add('-ability', pokemon, 'Intimidate 2', 'boost'); + activated = true; + } + if (target.volatiles['substitute']) { + this.add('-immune', target); + } else { + this.boost({ atk: -1 }, target, pokemon, null, true); + timesActivated++; + } + } + if (timesActivated > 0) { + for (let i = 0; i < timesActivated; i++) { + this.boost({ atk: 1 }, pokemon, pokemon, null, true); + } + } + }, + flags: {}, + name: "Intimidate 2", + rating: 3.5, + num: 22, + }, + asonemonarch: { + onSwitchInPriority: 1, + onStart(pokemon) { + if (this.effectState.unnerved) return; + this.add('-ability', pokemon, 'As One'); + this.add('-ability', pokemon, 'Unnerve'); + this.effectState.unnerved = true; + }, + onEnd() { + this.effectState.unnerved = false; + }, + onFoeTryEatItem() { + return !this.effectState.unnerved; + }, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 }, + name: "As One (Monarch)", + rating: 3.5, + num: 266, + }, + intimidate: { + inherit: true, + onStart(pokemon) { + let activated = false; + for (const target of pokemon.adjacentFoes()) { + if (!activated) { + this.add('-ability', pokemon, 'Intimidate', 'boost'); + activated = true; + } + if (target.volatiles['substitute']) { + this.add('-immune', target); + } else { + this.boost({ atk: -2 }, target, pokemon, null, true); + } + } + }, + }, +}; diff --git a/data/mods/afd/conditions.ts b/data/mods/afd/conditions.ts new file mode 100644 index 0000000000..12ee4b62c9 --- /dev/null +++ b/data/mods/afd/conditions.ts @@ -0,0 +1,22 @@ +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { + sandstorm: { + inherit: true, + onWeatherModifyDamage(damage, attacker, defender, move) { + if (defender.hasItem('utilityumbrella')) return; + if (move.type === 'Rock') { + this.debug('Sandstorm rock boost'); + return this.chainModify(1.5); + } + }, + }, + snowscape: { + inherit: true, + onModifySpePriority: 10, + onModifySpe(spe, pokemon) { + if (!pokemon.getTypes(false, true).includes('Ice') && !pokemon.getTypes(false, true).includes('Steel') && + !pokemon.hasAbility(['slushrush', 'snowcloak', 'iceface', 'icebody']) && pokemon.effectiveWeather() === 'snowscape') { + return this.modify(spe, 0.5); + } + }, + }, +}; diff --git a/data/mods/afd/items.ts b/data/mods/afd/items.ts new file mode 100644 index 0000000000..1828254175 --- /dev/null +++ b/data/mods/afd/items.ts @@ -0,0 +1,93 @@ +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { + hoots: { + name: "Hoots", + spritenum: 715, + fling: { + basePower: 80, + }, + num: 1120, + gen: 8, + // Hazard Immunity implemented in moves.ts + }, + luckycharm: { + name: "Lucky Charm", + onModifyMovePriority: -2, + onModifyMove(move, pokemon, target) { + let trigger = false; + if (move.secondaries) { + this.debug('doubling secondary chance'); + for (const secondary of move.secondaries) { + if (secondary.chance && secondary.chance < 100) { + secondary.chance = 100; + if (!trigger) trigger = true; + } + } + } + if (move.self?.chance) { + move.self.chance = 100; + trigger = true; + } + if (trigger) { + pokemon.useItem(); + } + }, + spritenum: 707, + fling: { + basePower: 120, + }, + num: 9999, + gen: 9, + }, + onikaburger: { + name: "Onika Burger", + desc: "PP and damage of every move is halved. Gain 25% max HP at the end of each turn.", + shortDesc: "PP and damage of every move is halved. Gain 25% max HP at the end of each turn.", + onStart(target) { + if (target.m.onikaBurger) return; + target.m.onikaBurger = true; + for (const moveSlot of target.moveSlots) { + const deductPP = target.deductPP(moveSlot.id, moveSlot.maxpp / 2, target); + if (!deductPP) continue; + this.add('-activate', target, 'item: Onika Burger', moveSlot.move, deductPP); + } + }, + onModifyDamage() { + return this.chainModify(0.5); + }, + onResidualOrder: 5, + onResidualSubOrder: 4, + onResidual(pokemon) { + this.heal(pokemon.baseMaxhp / 4); + }, + }, + wardtag: { + name: "Ward Tag", + desc: "Reflects back 125% of the damage that would've been dealt. One-time use.", + shortDesc: "Reflects back 125% of the damage that would've been dealt. One-time use.", + onDamage(damage, target, source, effect) { + if (source && target !== source && effect?.effectType === 'Move' && target.useItem()) { + this.add('-activate', target, 'item: Ward Tag'); + this.damage(damage * 5 / 4, source, target); + return 0; + } + }, + }, + strengthpolicy: { + name: "Strength Policy", + spritenum: 609, + fling: { + basePower: 80, + }, + onDamagingHit(damage, target, source, move) { + if (!move.damage && !move.damageCallback && target.getMoveHitData(move).typeMod < 0) { + target.useItem(); + } + }, + boosts: { + def: 2, + spd: 2, + }, + num: 639, + gen: 6, + }, +}; diff --git a/data/mods/afd/moves.ts b/data/mods/afd/moves.ts new file mode 100644 index 0000000000..d4723eda53 --- /dev/null +++ b/data/mods/afd/moves.ts @@ -0,0 +1,599 @@ +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { + banefulbunker: { + inherit: true, + condition: { + inherit: true, + onTryHit(target, source, move) { + if (this.checkMoveBypassesProtect(move, source, target)) return; + if (move.smartTarget) { + move.smartTarget = false; + } else { + if (!this.randomChance(2, 10)) { + this.add('-activate', target, 'move: Protect'); + if (move.basePower >= 100) { + this.add('message', '**BWUAHAAUAAAANGGGGGG**'); + } + } else { + return; + } + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + if (this.checkMoveMakesContact(move, source, target)) { + source.trySetStatus('psn', target); + } + return this.NOT_FAIL; + }, + }, + }, + burningbulwark: { + inherit: true, + condition: { + inherit: true, + onTryHit(target, source, move) { + if (this.checkMoveBypassesProtect(move, source, target, false)) return; + if (move.smartTarget) { + move.smartTarget = false; + } else { + if (!this.randomChance(2, 10)) { + this.add('-activate', target, 'move: Protect'); + if (move.basePower >= 100) { + this.add('message', '**BWUAHAAUAAAANGGGGGG**'); + } + } else { + return; + } + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + if (this.checkMoveMakesContact(move, source, target)) { + source.trySetStatus('brn', target); + } + return this.NOT_FAIL; + }, + }, + }, + kingsshield: { + inherit: true, + condition: { + inherit: true, + onTryHit(target, source, move) { + if (this.checkMoveBypassesProtect(move, source, target, false)) return; + if (move.smartTarget) { + move.smartTarget = false; + } else { + if (!this.randomChance(2, 10)) { + this.add('-activate', target, 'move: Protect'); + if (move.basePower >= 100) { + this.add('message', '**BWUAHAAUAAAANGGGGGG**'); + } + } else { + return; + } + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + if (this.checkMoveMakesContact(move, source, target)) { + this.boost({ atk: -1 }, source, target, this.dex.getActiveMove("King's Shield")); + } + return this.NOT_FAIL; + }, + }, + }, + maxguard: { + inherit: true, + condition: { + inherit: true, + onTryHit(target, source, move) { + const bypassesMaxGuard = [ + 'acupressure', 'afteryou', 'allyswitch', 'aromatherapy', 'aromaticmist', 'coaching', 'confide', 'copycat', 'curse', 'decorate', 'doomdesire', 'feint', 'futuresight', 'gmaxoneblow', 'gmaxrapidflow', 'healbell', 'holdhands', 'howl', 'junglehealing', 'lifedew', 'meanlook', 'perishsong', 'playnice', 'powertrick', 'roar', 'roleplay', 'tearfullook', + ]; + if (bypassesMaxGuard.includes(move.id)) return; + if (move.smartTarget) { + move.smartTarget = false; + } else { + if (!this.randomChance(2, 10)) { + this.add('-activate', target, 'move: Protect'); + if (move.basePower >= 100) { + this.add('message', '**BWUAHAAUAAAANGGGGGG**'); + } + } else { + return; + } + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + return this.NOT_FAIL; + }, + }, + }, + meteorbeam: { + inherit: true, + onTryMove(attacker, defender, move) { + if (attacker.removeVolatile(move.id)) { + return; + } + this.add('-prepare', attacker, move.name); + this.boost({ spa: 1 }, attacker, attacker, move); + if (['sandstorm'].includes(attacker.effectiveWeather())) { + this.attrLastMove('[still]'); + this.addMove('-anim', attacker, move.name, defender); + return; + } + if (!this.runEvent('ChargeMove', attacker, defender, move)) { + return; + } + attacker.addVolatile('twoturnmove', defender); + return null; + }, + }, + obstruct: { + inherit: true, + condition: { + inherit: true, + onTryHit(target, source, move) { + if (this.checkMoveBypassesProtect(move, source, target, false)) return; + if (move.smartTarget) { + move.smartTarget = false; + } else { + if (!this.randomChance(2, 10)) { + this.add('-activate', target, 'move: Protect'); + if (move.basePower >= 100) { + this.add('message', '**BWUAHAAUAAAANGGGGGG**'); + } + } else { + return; + } + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + if (this.checkMoveMakesContact(move, source, target)) { + this.boost({ def: -2 }, source, target, this.dex.getActiveMove("Obstruct")); + } + return this.NOT_FAIL; + }, + }, + }, + protect: { + inherit: true, + condition: { + inherit: true, + onTryHit(target, source, move) { + if (this.checkMoveBypassesProtect(move, source, target)) return; + if (move.smartTarget) { + move.smartTarget = false; + } else { + if (!this.randomChance(2, 10)) { + this.add('-activate', target, 'move: Protect'); + if (move.basePower >= 100) { + this.add('message', '**BWUAHAAUAAAANGGGGGG**'); + } + } else { + return; + } + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + return this.NOT_FAIL; + }, + }, + }, + silktrap: { + inherit: true, + condition: { + inherit: true, + onTryHit(target, source, move) { + if (this.checkMoveBypassesProtect(move, source, target, false)) return; + if (move.smartTarget) { + move.smartTarget = false; + } else { + if (!this.randomChance(2, 10)) { + this.add('-activate', target, 'move: Protect'); + if (move.basePower >= 100) { + this.add('message', '**BWUAHAAUAAAANGGGGGG**'); + } + } else { + return; + } + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + if (this.checkMoveMakesContact(move, source, target)) { + this.boost({ spe: -1 }, source, target, this.dex.getActiveMove("Silk Trap")); + } + return this.NOT_FAIL; + }, + }, + }, + spikyshield: { + inherit: true, + condition: { + inherit: true, + onTryHit(target, source, move) { + if (this.checkMoveBypassesProtect(move, source, target)) return; + if (move.smartTarget) { + move.smartTarget = false; + } else { + if (!this.randomChance(2, 10)) { + this.add('-activate', target, 'move: Protect'); + if (move.basePower >= 100) { + this.add('message', '**BWUAHAAUAAAANGGGGGG**'); + } + } else { + return; + } + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + if (this.checkMoveMakesContact(move, source, target)) { + this.damage(source.baseMaxhp / 8, source, target); + } + return this.NOT_FAIL; + }, + }, + }, + stealthrock: { + inherit: true, + condition: { + onSideStart(side) { + this.add('-sidestart', side, 'Stealth Rock'); + this.effectState.layers = 1; + }, + onSideRestart(side) { + if (this.effectState.layers >= 5) return false; + this.add('-sidestart', side, 'Stealth Rock'); + this.effectState.layers++; + }, + onSwitchIn(pokemon) { + if (pokemon.hasItem(['heavydutyboots', 'hoots'])) return; + const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6); + const damageAmounts = [0, 1, 2, 3, 4, 5]; // 2 ** typeMod / 8 + this.damage((damageAmounts[this.effectState.layers] / 5) * pokemon.maxhp * ((2 ** typeMod) / 8)); + }, + }, + }, + gmaxsteelsurge: { + inherit: true, + condition: { + onSideStart(side) { + this.add('-sidestart', side, 'G-Max Steelsurge'); + this.effectState.layers = 1; + }, + onSideRestart(side) { + if (this.effectState.layers >= 5) return false; + this.add('-sidestart', side, 'G-Max Steelsurge'); + this.effectState.layers++; + }, + onSwitchIn(pokemon) { + if (pokemon.hasItem(['heavydutyboots', 'hoots'])) return; + const steelHazard = this.dex.getActiveMove('Stealth Rock'); + steelHazard.type = 'Steel'; + const typeMod = this.clampIntRange(pokemon.runEffectiveness(steelHazard), -6, 6); + const damageAmounts = [0, 1, 2, 3, 4, 5]; // 2 ** typeMod / 8 + this.damage((damageAmounts[this.effectState.layers] / 5) * pokemon.maxhp * ((2 ** typeMod) / 8)); + }, + }, + }, + spikes: { + inherit: true, + condition: { + inherit: true, + onSwitchIn(pokemon) { + if (!pokemon.isGrounded() || pokemon.hasItem(['heavydutyboots', 'hoots'])) return; + const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 + this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24); + }, + }, + }, + stickyweb: { + inherit: true, + condition: { + inherit: true, + onSwitchIn(pokemon) { + if (!pokemon.isGrounded() || pokemon.hasItem(['heavydutyboots', 'hoots'])) return; + this.add('-activate', pokemon, 'move: Sticky Web'); + this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb')); + }, + }, + }, + toxicspikes: { + inherit: true, + condition: { + inherit: true, + onSwitchIn(pokemon) { + if (!pokemon.isGrounded()) return; + if (pokemon.hasType('Poison')) { + this.add('-sideend', pokemon.side, 'move: Toxic Spikes', `[of] ${pokemon}`); + pokemon.side.removeSideCondition('toxicspikes'); + } else if (pokemon.hasType('Steel') || pokemon.hasItem(['heavydutyboots', 'hoots'])) { + // do nothing + } else if (this.effectState.layers >= 2) { + pokemon.trySetStatus('tox', pokemon.side.foe.active[0]); + } else { + pokemon.trySetStatus('psn', pokemon.side.foe.active[0]); + } + }, + }, + }, + suckerpunch: { + inherit: true, + onTry() { }, + onModifyPriority(priority, source, target, move) { + if (!target) return priority - 1; + const action = this.queue.willMove(target); + const aMove = action?.choice === 'move' ? action.move : null; + if (!aMove || (aMove.category === 'Status' && aMove.id !== 'mefirst') || target.volatiles['mustrecharge']) { + return priority - 1; + } + return priority; + }, + }, + thousandarrows: { + inherit: true, + basePower: 120, + }, + healpulse: { + inherit: true, + onHit(target, source) { + let success = false; + if (source.hasAbility('supermegalauncher')) { + success = !!this.heal(this.modify(target.baseMaxhp, 2)); + } else if (source.hasAbility('megalauncher')) { + success = !!this.heal(this.modify(target.baseMaxhp, 0.75)); + } else { + success = !!this.heal(Math.ceil(target.baseMaxhp * 0.5)); + } + if (success && !target.isAlly(source)) { + target.staleness = 'external'; + } + if (!success) { + this.add('-fail', target, 'heal'); + return this.NOT_FAIL; + } + return success; + }, + }, + headsmash: { + inherit: true, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, heal: 1 }, + secondary: { + chance: 100, + onHit(target, source, move) { + if (!this.heal(this.modify(target.baseMaxhp, 0.25))) { + return this.NOT_FAIL; + } + }, + }, + }, + knockoff: { + inherit: true, + accuracy: 90, + }, + shitpulse: { + num: -400, + gen: 9, + accuracy: 100, + basePower: 75, + category: "Special", + name: "Shit Pulse", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1 }, + secondary: { + chance: 30, + boosts: { + accuracy: -2, + }, + }, + target: "any", + type: "Poison", + shortDesc: "30% chance to lower foe's accuracy by 2.", + }, + solarflare: { + num: -4324534, + gen: 9, + accuracy: 100, + basePower: 75, + category: "Special", + name: "Solar Flare", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + secondary: { + chance: 50, + onHit(target, source, move) { + if (!['sunnyday', 'desolateland'].includes(target.effectiveWeather())) return; + target.trySetStatus('brn', source, move); + }, + }, + target: "normal", + type: "Fire", + shortDesc: "Sun active: 50% chance to burn.", + }, + onslaught: { + num: -3023, + gen: 9, + accuracy: 100, + basePower: 100, + category: "Physical", + name: "Onslaught", + pp: 5, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + self: { + boosts: { + atk: -1, + def: -1, + }, + }, + target: "normal", + type: "Dark", + }, + scald: { + inherit: true, + onEffectiveness(typeMod, target, type) { + if (type === 'Steel') return 1; + }, + secondary: undefined, + secondaries: [{ + chance: 30, + status: 'brn', + }, { + chance: 100, + onHit(target, source, move) { + if (target.hasType(['Normal', 'Fairy'])) { + target.trySetStatus('brn', source, move); + } + }, + }], + }, + explosion: { + inherit: true, + onAfterMove(pokemon, target, move) { + if (target && target.hp <= 0) { + delete move.selfdestruct; + return; + } + }, + }, + selfdestruct: { + inherit: true, + onAfterMove(pokemon, target, move) { + if (target && target.hp <= 0) { + delete move.selfdestruct; + return; + } + }, + }, + mistyexplosion: { + inherit: true, + onAfterMove(pokemon, target, move) { + if (target && target.hp <= 0) { + delete move.selfdestruct; + return; + } + }, + }, + moonblast: { + inherit: true, + basePower: 90, + accuracy: 90, + secondary: { + chance: 10, + boosts: { + atk: -1, + }, + }, + category: "Physical", + }, + noretreat: { + name: "No Retreat", + // @ts-expect-error + exists: false, + }, + blastiodon: { + num: -306345534534523, + gen: 9, + accuracy: 100, + basePower: 0, + basePowerCallback(pokemon, target) { + const targetDef = target.getStat('def', false, true); + const pokemonDef = pokemon.getStat('def', false, true); + let bp; + if (pokemonDef >= targetDef * 5) { + bp = 150; + } else if (pokemonDef >= targetDef * 4) { + bp = 125; + } else if (pokemonDef >= targetDef * 3) { + bp = 100; + } else if (pokemonDef >= targetDef * 2) { + bp = 75; + } else { + bp = 50; + } + this.debug(`BP: ${bp}`); + return bp; + }, + category: "Physical", + name: "Blastiodon", + pp: 15, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + overrideOffensiveStat: 'def', + secondary: { + chance: 50, + boosts: { + def: -1, + }, + }, + target: "normal", + type: "Rock", + shortDesc: "Higher user Def than target Def = higher BP.", + }, + focusblast: { + inherit: true, + accuracy: 100, + recoil: [1, 4], + category: "Physical", + }, + darkvoid: { + inherit: true, + onModifyMove(move, pokemon, target) { + if (pokemon.species.baseSpecies === 'Calyrex') { + move.accuracy = 80; + } + }, + onTry(source, target, move) { + if (source.species.baseSpecies === 'Darkrai' || source.species.baseSpecies === 'Calyrex' || move.hasBounced) { + return; + } + this.add('-fail', source, 'move: Dark Void'); + this.hint("Only a Pokemon whose form is Darkrai can use this move."); + return null; + }, + }, + rapidspin: { + inherit: true, + type: "Dark", + }, +}; diff --git a/data/mods/afd/pokedex.ts b/data/mods/afd/pokedex.ts new file mode 100644 index 0000000000..69e614f9c6 --- /dev/null +++ b/data/mods/afd/pokedex.ts @@ -0,0 +1,329 @@ +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { + seaking: { + inherit: true, + baseStats: { hp: 80, atk: 92, def: 65, spa: 65, spd: 80, spe: 98 }, + }, + clefablemega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + victreebelmega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + starmiemega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + skarmorymega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + scolipedemega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + scraftymega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + emboarmega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + eelektrossmega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + chesnaughtmega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + delphoxmega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + greninjamega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + pyroarmega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + barbaraclemega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + hawluchamega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + raichumegax: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + chimechomega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + baxcaliburmega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + zeraoramega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + absolmegaz: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + staraptormega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + golisopodmega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + meowsticfmega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + crabominablemega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + golurkmega: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + garchompmegaz: { + inherit: true, + abilities: { 0: "Huge Power" }, + }, + lucariomegaz: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + raichumegay: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + falinksmega: { + inherit: true, + abilities: { 0: "No Retreat" }, + }, + drampamega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + zygardemega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + dragalgemega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + darkraimega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + heatranmega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + floettemega: { + inherit: true, + abilities: { 0: "Regenerator" }, + }, + chandeluremega: { + inherit: true, + abilities: { 0: "Shadow Tag" }, + }, + lickitung: { + inherit: true, + abilities: { 0: "Own Tempo", 1: "Oblivious", H: "Chaos Saliva" }, + }, + mewtwo: { + inherit: true, + abilities: { 0: "Pressure", 1: "Neuroforce", H: "Unnerve" }, + }, + scovillainmega: { + inherit: true, + abilities: { 0: "Contrary" }, + }, + mew: { + inherit: true, + abilities: { 0: "Synchronize", 1: "Neuroforce" }, + }, + smeargle: { + inherit: true, + abilities: { 0: "Own Tempo", 1: "Prankster", H: "Moody" }, + }, + swampert: { + inherit: true, + abilities: { 0: "Torrent", 1: "Sap Sipper", H: "Damp" }, + }, + bibarel: { + inherit: true, + baseStats: { hp: 159, atk: 85, def: 60, spa: 55, spd: 60, spe: 151 }, + }, + skuntank: { + inherit: true, + baseStats: { hp: 103, atk: 93, def: 67, spa: 106, spd: 61, spe: 84 }, + abilities: { 0: "Stench", 1: "Aftermath", H: "Mega Launcher" }, + }, + rampardos: { + inherit: true, + baseStats: { hp: 97, atk: 225, def: 30, spa: 65, spd: 30, spe: 58 }, + abilities: { 0: "Rocky Payload", H: "Sheer Force" }, + }, + gallademega: { + inherit: true, + abilities: { 0: "Sharpness" }, + }, + garchompmega: { + inherit: true, + abilities: { 0: "Sand Rush" }, + }, + dusknoir: { + inherit: true, + abilities: { 0: "Damp" }, + }, + lickilicky: { + inherit: true, + abilities: { 0: "Own Tempo", 1: "Oblivious", H: "Chaos Saliva" }, + }, + regigigas: { + inherit: true, + abilities: { 0: "Slow Start", H: "Fast Start" }, + }, + serperior: { + inherit: true, + types: ['Grass', 'Dragon'], + baseStats: { hp: 75, atk: 75, def: 95, spa: 105, spd: 95, spe: 113 }, + }, + simisage: { + inherit: true, + baseStats: { hp: 120, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 }, + }, + excadrillmega: { + inherit: true, + abilities: { 0: "It's Excadrillin' Time!" }, + }, + chandelure: { + inherit: true, + abilities: { 0: "Flash Fire", 1: "Flame Body", H: "Shadow Tag" }, + }, + delphox: { + inherit: true, + abilities: { 0: "Blaze", H: "Discourage" }, + }, + clawitzer: { + inherit: true, + abilities: { 0: "Super Mega Launcher" }, + }, + malamar: { + inherit: true, + baseStats: { hp: 101, atk: 112, def: 88, spa: 68, spd: 75, spe: 73 }, + }, + malamarmega: { + inherit: true, + baseStats: { hp: 101, atk: 122, def: 88, spa: 98, spd: 120, spe: 88 }, + abilities: { 0: "Contrary" }, + }, + incineroar: { + inherit: true, + types: ['Fire', 'Fighting'], + }, + incineroar2: { + num: 2000, + name: "Incineroar 2", + types: ["Ghost", "Steel"], + genderRatio: { M: 0.875, F: 0.125 }, + baseStats: { hp: 95, atk: 115, def: 90, spa: 80, spd: 90, spe: 60 }, + abilities: { 0: "Intimidate 2" }, + heightm: 1.8, + weightkg: 83, + color: "Red", + eggGroups: ["Field"], + }, + celesteela: { + inherit: true, + baseStats: { hp: 5, atk: 5, def: 5, spa: 5, spd: 5, spe: 5 }, + }, + hatterene: { + inherit: true, + types: ['Psychic', 'Dark'], + }, + glimmora: { + inherit: true, + baseStats: { hp: 106, atk: 150, def: 70, spa: 194, spd: 120, spe: 140 }, + }, + glimmoramega: { + inherit: true, + baseStats: { hp: 106, atk: 185, def: 85, spa: 214, spd: 145, spe: 155 }, + abilities: { 0: "Regenerator" }, + }, + tatsugiri: { + inherit: true, + abilities: { 0: "Commander", 1: "Parental Bond", H: "Storm Drain" }, + }, + tatsugiridroopy: { + inherit: true, + abilities: { 0: "Commander", 1: "Parental Bond", H: "Storm Drain" }, + }, + tatsugiristretchy: { + inherit: true, + abilities: { 0: "Commander", 1: "Parental Bond", H: "Storm Drain" }, + }, + tatsugiricurlymega: { + inherit: true, + abilities: { 0: "Parental Bond" }, + }, + tatsugiridroopymega: { + inherit: true, + abilities: { 0: "Parental Bond" }, + }, + tatsugiristretchymega: { + inherit: true, + abilities: { 0: "Parental Bond" }, + }, + calyrex: { + num: 898, + name: "Calyrex", + types: ["Psychic", "Grass"], + gender: "N", + baseStats: { hp: 100, atk: 80, def: 80, spa: 80, spd: 80, spe: 80 }, + abilities: { 0: "Unnerve" }, + heightm: 1.1, + weightkg: 7.7, + color: "Green", + eggGroups: ["Undiscovered"], + tags: ["Restricted Legendary"], + otherFormes: ["Calyrex-Ice", "Calyrex-Shadow", "Calyrex-Monarch"], + formeOrder: ["Calyrex", "Calyrex-Ice", "Calyrex-Shadow", "Calyrex-Monarch"], + }, + calyrexmonarch: { + num: 898, + name: "Calyrex-Monarch", + baseSpecies: "Calyrex", + forme: "Monarch", + types: ["Psychic", "Grass"], + gender: "N", + baseStats: { hp: 200, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 }, + abilities: { 0: "As One (Calyrex)" }, + heightm: 2.2, + weightkg: 15.4, + color: "Green", + eggGroups: ["Undiscovered"], + changesFrom: "Calyrex", + }, + spidops: { + inherit: true, + baseStats: { hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 0 }, + }, +}; diff --git a/data/mods/afd/random-teams.ts b/data/mods/afd/random-teams.ts new file mode 100644 index 0000000000..d1639d9334 --- /dev/null +++ b/data/mods/afd/random-teams.ts @@ -0,0 +1,788 @@ +import { Utils } from '../../../lib'; +import RandomTeams from '../../random-battles/gen9/teams'; +import { toID } from '../../../sim/dex'; + +export interface TeamData { + typeCount: { [k: string]: number }; + typeComboCount: { [k: string]: number }; + baseFormes: { [k: string]: number }; + megaCount?: number; + zCount?: number; + wantsTeraCount?: number; + has: { [k: string]: number }; + forceResult: boolean; + weaknesses: { [k: string]: number }; + resistances: { [k: string]: number }; + weather?: string; + eeveeLimCount?: number; + gigantamax?: boolean; +} +export interface BattleFactorySpecies { + sets: BattleFactorySet[]; + weight: number; +} +interface BattleFactorySet { + species: string; + weight: number; + item: string[]; + ability: string[]; + nature: string[]; + moves: string[][]; + teraType: string[]; + gender?: string; + wantsTera?: boolean; + evs?: Partial; + ivs?: Partial; + shiny?: boolean; + level?: number; +} +export class MoveCounter extends Utils.Multiset { + damagingMoves: Set; + basePowerMoves: Set; + + constructor() { + super(); + this.damagingMoves = new Set(); + this.basePowerMoves = new Set(); + } +} +// Moves that switch the user out +const PIVOT_MOVES = [ + 'chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch', +]; + +/** Pokemon who should never be in the lead slot */ +const NO_LEAD_POKEMON = [ + 'Zacian', 'Zamazenta', +]; + +const DEFENSIVE_TERA_BLAST_USERS = [ + 'alcremie', 'bellossom', 'comfey', 'fezandipiti', 'florges', +]; + +export class RandomAFDTeams extends RandomTeams { + override shouldCullAbility( + ability: string, + types: string[], + moves: Set, + abilities: string[], + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ): boolean { + switch (ability) { + // Abilities which are primarily useful for certain moves or with team support + case 'Chlorophyll': case 'Solar Power': + return !teamDetails.sun; + case 'Defiant': + return (species.id === 'thundurus' && !!counter.get('Status')); + case 'Hydration': case 'Swift Swim': + return !teamDetails.rain; + case 'Iron Fist': case 'Skill Link': + return !counter.get(toID(ability)); + case 'Overgrow': + return !counter.get('Grass'); + case 'Prankster': + return !counter.get('Status'); + case 'Sand Force': case 'Sand Rush': case 'It\'s Excadrillin\' Time!': + return !teamDetails.sand; + case 'Slush Rush': + return !teamDetails.snow; + case 'Swarm': + return !counter.get('Bug'); + case 'Torrent': + return (!counter.get('Water') && !moves.has('flipturn')); + } + + return false; + } + + override getAbility( + types: string[], + moves: Set, + abilities: string[], + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ): string { + if (abilities.length <= 1) return abilities[0]; + + // Hard-code abilities here + if (species.id === 'drifblim') return moves.has('defog') ? 'Aftermath' : 'Unburden'; + if (abilities.includes('Flash Fire') && this.dex.getEffectiveness('Fire', teraType) >= 1) return 'Flash Fire'; + if ((species.id === 'thundurus' || species.id === 'tornadus') && !counter.get('Physical')) return 'Prankster'; + if (species.id === 'toucannon' && counter.get('skilllink')) return 'Skill Link'; + if (abilities.includes('Slush Rush') && moves.has('snowscape')) return 'Slush Rush'; + if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim'; + + const abilityAllowed: string[] = []; + // Obtain a list of abilities that are allowed (not culled) + for (const ability of abilities) { + if (!this.shouldCullAbility( + ability, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role + )) { + abilityAllowed.push(ability); + } + } + + // Pick a random allowed ability + if (abilityAllowed.length >= 1) return this.sample(abilityAllowed); + + // If all abilities are rejected, prioritize weather abilities over non-weather abilities + if (!abilityAllowed.length) { + const weatherAbilities = abilities.filter( + a => ['Chlorophyll', 'Hydration', 'Sand Force', 'Sand Rush', 'Slush Rush', 'Solar Power', 'Swift Swim'].includes(a) + ); + if (weatherAbilities.length) return this.sample(weatherAbilities); + } + + // Pick a random ability + return this.sample(abilities); + } + + override getPriorityItem( + ability: string, + types: string[], + moves: Set, + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ) { + if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) { + return 'Booster Energy'; + } + if (species.id === 'lokix') { + return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb'; + } + if (species.requiredItems && species.baseSpecies !== 'Magearna') { + // Z-Crystals aren't available in Gen 9, so require Plates + if (species.baseSpecies === 'Arceus') { + return species.requiredItems[0]; + } + return this.sample(species.requiredItems); + } + if (species.id === 'pikachu') return 'Light Ball'; + if (role === 'AV Pivot') return 'Assault Vest'; + if (species.id === 'regieleki') return 'Magnet'; + if (types.includes('Normal') && moves.has('doubleedge') && moves.has('fakeout')) return 'Silk Scarf'; + if ( + species.id === 'froslass' || moves.has('populationbomb') || + (ability === 'Hustle' && counter.get('setup') && !isDoubles && this.randomChance(1, 2)) + ) return 'Wide Lens'; + if (species.id === 'smeargle') return 'Focus Sash'; + if (moves.has('clangoroussoul') || (species.id === 'toxtricity' && moves.has('shiftgear'))) return 'Throat Spray'; + if ( + (species.baseSpecies === 'Magearna' && role === 'Tera Blast user') || + ((species.id === 'calyrexice' || species.id === 'necrozmaduskmane') && isDoubles) + ) return 'Weakness Policy'; + if (['dragonenergy', 'lastrespects', 'waterspout'].some(m => moves.has(m))) return 'Choice Scarf'; + if ( + !isDoubles && (ability === 'Imposter' || (species.id === 'magnezone' && role === 'Fast Attacker')) + ) return 'Choice Scarf'; + if (species.id === 'rampardos' && (role === 'Fast Attacker' || isDoubles)) return 'Choice Scarf'; + if (species.id === 'palkia' && counter.get('Status')) return 'Lustrous Orb'; + if ( + moves.has('courtchange') || + !isDoubles && (species.id === 'luvdisc' || (species.id === 'terapagos' && !moves.has('rest'))) + ) return 'Hoots'; + if (['Cheek Pouch', 'Cud Chew', 'Harvest', 'Ripen'].some(m => ability === m)) { + return 'Sitrus Berry'; + } + if (moves.has('bellydrum') || moves.has('filletaway')) return 'Ward Tag'; + if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) { + if ( + species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && + role !== 'Wallbreaker' && role !== 'Doubles Wallbreaker' && !counter.get('priority') + ) { + return 'Choice Scarf'; + } else { + return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs'; + } + } + if (counter.get('Status') && (species.name === 'Latias' || species.name === 'Latios')) return 'Soul Dew'; + if (species.id === 'scyther' && !isDoubles) return (isLead && !moves.has('uturn')) ? 'Eviolite' : 'Hoots'; + if (ability === 'Poison Heal' || ability === 'Quick Feet') return 'Toxic Orb'; + if (species.nfe) return 'Eviolite'; + if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) { + return (types.includes('Fire') || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb'; + } + if (ability === 'Magic Guard' || (ability === 'Sheer Force' && counter.get('sheerforce'))) return 'Life Orb'; + if (ability === 'Anger Shell') return this.sample(['Expert Belt', 'Lum Berry', 'Scope Lens', 'Sitrus Berry']); + if (moves.has('dragondance') && isDoubles) return 'Clear Amulet'; + if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice'; + if (ability === 'Unburden') { + return (moves.has('closecombat') || moves.has('leafstorm')) ? 'White Herb' : 'Sitrus Berry'; + } + if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb'; + if (moves.has('meteorbeam') || (moves.has('electroshot') && !teamDetails.rain)) return 'Power Herb'; + if (moves.has('acrobatics') && ability !== 'Protosynthesis') return ''; + if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay'; + if (ability === 'Gluttony') return `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`; + if (species.id === 'giratina' && !isDoubles && moves.has('rest') && !moves.has('sleeptalk')) return 'Leftovers'; + if ( + moves.has('rest') && !moves.has('sleeptalk') && + ability !== 'Natural Cure' && ability !== 'Shed Skin' + ) { + return 'Chesto Berry'; + } + if ( + species.id !== 'yanmega' && + this.dex.getEffectiveness('Rock', species) >= 2 && (!types.includes('Flying') || !isDoubles) + ) return 'Hoots'; + } + + override getItem( + ability: string, + types: string[], + moves: Set, + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ): string { + const lifeOrbReqs = ['flamecharge', 'nuzzle', 'rapidspin'].every(m => !moves.has(m)); + + if ( + species.id !== 'jirachi' && (counter.get('Physical') >= moves.size) && + ['dragontail', 'fakeout', 'firstimpression', 'flamecharge', 'rapidspin', 'trailblaze'].every(m => !moves.has(m)) + ) { + const scarfReqs = ( + role !== 'Wallbreaker' && + (species.baseStats.atk >= 100 || ability === 'Huge Power' || ability === 'Pure Power') && + species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && + ability !== 'Speed Boost' && !counter.get('priority') + ); + return (scarfReqs && this.randomChance(1, 2)) ? 'Choice Scarf' : 'Choice Band'; + } + if ( + (counter.get('Special') >= moves.size) || + (counter.get('Special') >= moves.size - 1 && ['flipturn', 'uturn'].some(m => moves.has(m))) + ) { + const scarfReqs = ( + role !== 'Wallbreaker' && + species.baseStats.spa >= 100 && + species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && + ability !== 'Speed Boost' && ability !== 'Tinted Lens' && !moves.has('uturn') && !counter.get('priority') + ); + return (scarfReqs && this.randomChance(1, 2)) ? 'Choice Scarf' : 'Choice Specs'; + } + if (counter.get('speedsetup') && !counter.get('physicalsetup') && role === 'Bulky Setup') return 'Weakness Policy'; + if ( + !counter.get('Status') && + !['Fast Attacker', 'Wallbreaker', 'Tera Blast user'].includes(role) + ) { + return 'Assault Vest'; + } + if (species.id === 'golem') return (counter.get('speedsetup')) ? 'Weakness Policy' : 'Custap Berry'; + if (moves.has('substitute')) return 'Leftovers'; + if ( + moves.has('stickyweb') && isLead && + (species.baseStats.hp + species.baseStats.def + species.baseStats.spd) <= 235 + ) return 'Focus Sash'; + if (this.dex.getEffectiveness('Rock', species) >= 1) return 'Hoots'; + if ( + (moves.has('chillyreception') || ( + role === 'Fast Support' && + [...PIVOT_MOVES, 'defog', 'mortalspin', 'rapidspin'].some(m => moves.has(m)) && + !types.includes('Flying') && ability !== 'Levitate' + )) + ) return 'Hoots'; + + // Low Priority + if (moves.has('dragondance') && role === 'Bulky Setup') return 'Weakness Policy'; + if ( + ability === 'Rough Skin' || ( + ability === 'Regenerator' && (role === 'Bulky Support' || role === 'Bulky Attacker') && + (species.baseStats.hp + species.baseStats.def) >= 180 && this.randomChance(1, 2) + ) || ( + ability !== 'Regenerator' && !counter.get('setup') && counter.get('recovery') && + this.dex.getEffectiveness('Fighting', species) < 1 && + (species.baseStats.hp + species.baseStats.def) > 200 && this.randomChance(1, 2) + ) + ) return 'Rocky Helmet'; + if (role === 'Bulky Support') return 'Onika Burger'; + if (moves.has('outrage') && counter.get('setup')) return 'Lum Berry'; + if (moves.has('protect') && ability !== 'Speed Boost') return 'Leftovers'; + if ( + role === 'Fast Support' && isLead && !counter.get('recovery') && !counter.get('recoil') && + (counter.get('hazards') || counter.get('setup')) && + (species.baseStats.hp + species.baseStats.def + species.baseStats.spd) < 258 + ) return 'Focus Sash'; + if ( + !counter.get('setup') && ability !== 'Levitate' && this.dex.getEffectiveness('Ground', species) >= 2 + ) return 'Air Balloon'; + if (['Bulky Attacker', 'Bulky Setup'].some(m => role === (m))) return 'Leftovers'; + if (species.id === 'pawmot' && moves.has('nuzzle')) return 'Leppa Berry'; + if (role === 'Fast Support' || role === 'Fast Bulky Setup') { + return ( + counter.get('Physical') + counter.get('Special') > counter.get('Status') && lifeOrbReqs + ) ? 'Life Orb' : 'Leftovers'; + } + if (role === 'Tera Blast user' && DEFENSIVE_TERA_BLAST_USERS.includes(species.id)) return 'Leftovers'; + if ( + lifeOrbReqs && ['Fast Attacker', 'Setup Sweeper', 'Tera Blast user', 'Wallbreaker'].some(m => role === (m)) + ) return 'Life Orb'; + return 'Leftovers'; + } + + override getLevel(species: Species): number { + if (this.adjustLevel) return this.adjustLevel; + const file = this.randomAFDSets[species.id] || this.randomSets[species.id]; + if (file["level"]) return file["level"]; + // Default to tier-based levelling + const tier = species.tier; + const tierScale: Partial> = { + Uber: 76, + OU: 80, + UUBL: 81, + UU: 82, + RUBL: 83, + RU: 84, + NUBL: 85, + NU: 86, + PUBL: 87, + PU: 88, "(PU)": 88, NFE: 88, + }; + return tierScale[tier] || 80; + } + + override getForme(species: Species): string { + if (typeof species.battleOnly === 'string') { + // Only change the forme. The species has custom moves, and may have different typing and requirements. + return species.battleOnly; + } + if (species.cosmeticFormes) return this.sample([species.name].concat(species.cosmeticFormes)); + + // Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles + if (['Dudunsparce', 'Maushold', 'Polteageist', 'Sinistcha', 'Zarude'].includes(species.baseSpecies)) { + return this.sample([species.name].concat(species.otherFormes!)); + } + if (species.baseSpecies === 'Basculin') return 'Basculin' + this.sample(['', '-Blue-Striped']); + if (species.baseSpecies === 'Magearna') return 'Magearna' + this.sample(['', '-Original']); + if (species.baseSpecies === 'Pikachu') { + return 'Pikachu' + this.sample( + ['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World'] + ); + } + return species.name; + } + + randomAFDSet( + s: string | Species, + teamDetails: RandomTeamsTypes.TeamDetails = {}, + isLead = false, + isDoubles = false + ): RandomTeamsTypes.RandomSet { + const species = this.dex.species.get(s); + const forme = this.getForme(species); + if (!this.randomAFDSets[species.id]) return this.randomSet(species, teamDetails, isLead, isDoubles); + const sets = this.randomAFDSets[species.id]["sets"]; + const possibleSets: RandomTeamsTypes.RandomSetData[] = []; + + const ruleTable = this.dex.formats.getRuleTable(this.format); + + for (const set of sets) { + // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy. + const abilities = set.abilities!; + if ( + isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) && + set.role === 'Fast Bulky Setup' + ) continue; + // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented. + if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') { + continue; + } + possibleSets.push(set); + } + const set = this.sampleIfArray(possibleSets); + const role = set.role; + const movePool: string[] = []; + for (const movename of set.movepool) { + movePool.push(this.dex.moves.get(movename).id); + } + const teraTypes = set.teraTypes!; + let teraType = this.sampleIfArray(teraTypes); + + let ability = ''; + let item = undefined; + + const evs = { hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85 }; + const ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 }; + + const types = species.types; + const abilities = set.abilities!; + + // Get moves + const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role); + const counter = this.queryMoves(moves, species, teraType, abilities); + + // Get ability + ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role); + + // Get items + // First, the priority items + item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role); + if (item === undefined) { + item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role); + } + + // Get level + const level = this.getLevel(species); + + // Prepare optimal HP + const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots' || item === 'Hoots'; + let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); + // Crash damage move users want an odd HP to survive two misses + if (['axekick', 'highjumpkick', 'jumpkick', 'supercellslam'].some(m => moves.has(m))) srWeakness = 2; + while (evs.hp > 1) { + const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + if ((moves.has('substitute') && ['Sitrus Berry'].includes(item)) || species.id === 'minior') { + // Two Substitutes should activate Sitrus Berry. Two switch-ins to Stealth Rock should activate Shields Down on Minior. + if (hp % 4 === 0) break; + } else if ( + (moves.has('bellydrum') || moves.has('filletaway') || moves.has('shedtail')) && + (item === 'Sitrus Berry' || ability === 'Gluttony') + ) { + // Belly Drum should activate Sitrus Berry + if (hp % 2 === 0) break; + } else if (moves.has('substitute') && moves.has('endeavor')) { + // Luvdisc should be able to Substitute down to very low HP + if (hp % 4 > 0) break; + } else { + // Maximize number of Stealth Rock switch-ins in singles + if (isDoubles) break; + if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb'].includes(item)) break; + if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break; + // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry + if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break; + } + evs.hp -= 4; + } + + // Minimize confusion damage + const noAttackStatMoves = [...moves].every(m => { + const move = this.dex.moves.get(m); + if (move.damageCallback || move.damage) return true; + if (move.id === 'shellsidearm') return false; + // Physical Tera Blast + if ( + move.id === 'terablast' && (species.id === 'porygon2' || ['Contrary', 'Defiant'].includes(ability) || + moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa) + ) return false; + return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay'; + }); + if ( + noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' && + !ruleTable.has('forceofthefallenmod') + ) { + evs.atk = 0; + ivs.atk = 0; + } + + if (moves.has('gyroball') || moves.has('trickroom')) { + evs.spe = 0; + ivs.spe = 0; + } + + // Enforce Tera Type after all set generation is done to prevent infinite generation + if (this.forceTeraType) teraType = this.forceTeraType; + + // shuffle moves to add more randomness to camomons + const shuffledMoves = Array.from(moves); + this.prng.shuffle(shuffledMoves); + let name = species.baseSpecies; + if (name === "Bruxish") name = "Brux"; + return { + name, + species: forme, + speciesId: species.id, + gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')), + shiny: this.randomChance(1, 1024), + level, + moves: shuffledMoves, + ability, + evs, + ivs, + item, + teraType, + role, + }; + } + + /** + * Checks if the new species is compatible with the other mons currently on the team. + */ + override getPokemonCompatibility( + species: Species, + pokemon: RandomTeamsTypes.RandomSet[] + ): boolean { + const webSetters = [ + 'ariados', 'smeargle', 'masquerain', 'kricketune', 'leavanny', 'galvantula', 'vikavolt', 'ribombee', 'araquanid', 'spidops', + ]; + const screenSetters = ['meowstic', 'grimmsnarl', 'ninetalesalola', 'abomasnow']; + + const sunSetters = ['ninetales', 'torkoal', 'groudon', 'koraidon']; + + const incompatiblePokemon = [ + // These Pokemon with support roles are considered too similar to each other. + ['blissey', 'chansey'], + ['illumise', 'volbeat'], + + // These combinations are prevented to avoid double webs or screens. + [webSetters, webSetters], + [screenSetters, screenSetters], + + // These Pokemon are incompatible because the presence of one actively harms the other. + // Prevent Dry Skin + sun setting ability + ['toxicroak', sunSetters], + ]; + + const incompatibilityList = incompatiblePokemon; + for (const pair of incompatibilityList) { + const monsArrayA = (Array.isArray(pair[0])) ? pair[0] : [pair[0]]; + const monsArrayB = (Array.isArray(pair[1])) ? pair[1] : [pair[1]]; + if (monsArrayB.includes(species.id)) { + if (pokemon.some(m => monsArrayA.includes(m.speciesId!))) return false; + } + if (monsArrayA.includes(species.id)) { + if (pokemon.some(m => monsArrayB.includes(m.speciesId!))) return false; + } + } + + return true; + } + + randomAFDSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); + + override randomTeam() { + this.enforceNoDirectCustomBanlistChanges(); + + const seed = this.prng.getSeed(); + const ruleTable = this.dex.formats.getRuleTable(this.format); + const pokemon: RandomTeamsTypes.RandomSet[] = []; + + // PotD stuff + const usePotD = global.Config && Config.potd && ruleTable.has('potd'); + const potd = usePotD ? this.dex.species.get(Config.potd) : null; + + const baseFormes: { [k: string]: number } = {}; + + const typeCount: { [k: string]: number } = {}; + const typeComboCount: { [k: string]: number } = {}; + const typeWeaknesses: { [k: string]: number } = {}; + const typeDoubleWeaknesses: { [k: string]: number } = {}; + const teamDetails: RandomTeamsTypes.TeamDetails = {}; + let numMaxLevelPokemon = 0; + + const pokemonList = Object.keys(this.randomSets); + const afdList = Object.keys(this.randomAFDSets); + const zaMegaList = Object.keys(this.randomAFDSets).filter(x => ( + this.dex.species.get(x).isMega && this.dex.species.get(x).gen === 9 + )); + const [pokemonPool, baseSpeciesPool] = this.getPokemonPool('', pokemon, false, pokemonList); + const [afdPool, baseAfdPool] = this.getPokemonPool('', pokemon, false, afdList); + const [zaMegaPool, zaBaseMegaPool] = this.getPokemonPool('', pokemon, false, zaMegaList); + + let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1; + while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { + let baseSpecies, species; + if (pokemon.length === 0) { + baseSpecies = this.sampleNoReplace(zaBaseMegaPool); + species = this.dex.species.get(this.sample(zaMegaPool[baseSpecies])); + } else if (this.randomChance(1, 5)) { + baseSpecies = this.sampleNoReplace(baseAfdPool); + species = this.dex.species.get(this.sample(afdPool[baseSpecies])); + } else { + baseSpecies = this.sampleNoReplace(baseSpeciesPool); + species = this.dex.species.get(this.sample(pokemonPool[baseSpecies])); + } + if (!species.exists) continue; + + // Limit to one of each species (Species Clause) + if (baseFormes[species.baseSpecies]) continue; + + // Treat Ogerpon formes and Terapagos like the Tera Blast user role; reject if team has one already + if (['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id) && teamDetails.teraBlast) continue; + + // Illusion shouldn't be on the last slot + if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue; + + const types = species.types; + const typeCombo = types.slice().sort().join(); + const weakToFreezeDry = ( + this.dex.getEffectiveness('Ice', species) > 0 || + (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water')) + ); + const weakToScald = ( + this.dex.getEffectiveness('Water', species) > 0 || + (this.dex.getEffectiveness('Water', species) > -2 && types.includes('Steel')) + ); + // Dynamically scale limits for different team sizes. The default and minimum value is 1. + const limitFactor = Math.round(this.maxTeamSize / 6) || 1; + + let skip = false; + + // Limit two of any type + for (const typeName of types) { + if (typeCount[typeName] >= 2 * limitFactor) { + skip = true; + break; + } + } + if (skip) continue; + + // Limit three weak to any type, and one double weak to any type + for (const typeName of this.dex.types.names()) { + // it's weak to the type + if (this.dex.getEffectiveness(typeName, species) > 0) { + if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0; + if (typeWeaknesses[typeName] >= 3 * limitFactor) { + skip = true; + break; + } + } + if (this.dex.getEffectiveness(typeName, species) > 1) { + if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0; + if (typeDoubleWeaknesses[typeName] >= limitFactor) { + skip = true; + break; + } + } + } + if (skip) continue; + + // Count Dry Skin/Fluffy as Fire weaknesses + if ( + this.dex.getEffectiveness('Fire', species) === 0 && + Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length + ) { + if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0; + if (typeWeaknesses['Fire'] >= 3 * limitFactor) continue; + } + + // Limit four weak to Freeze-Dry + if (weakToFreezeDry) { + if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0; + if (typeWeaknesses['Freeze-Dry'] >= 4 * limitFactor) continue; + } + if (weakToScald) { + if (!typeWeaknesses['Scald']) typeWeaknesses['Scald'] = 0; + if (typeWeaknesses['Scald'] >= 4 * limitFactor) continue; + } + + // Limit one level 100 Pokemon + if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) { + continue; + } + + // Check compatibility with team + if (!this.getPokemonCompatibility(species, pokemon)) continue; + + // The Pokemon of the Day + if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd; + + let set: RandomTeamsTypes.RandomSet; + + if (leadsRemaining) { + if (NO_LEAD_POKEMON.includes(species.baseSpecies)) { + if (pokemon.length + leadsRemaining === this.maxTeamSize) continue; + set = this.randomAFDSet(species, teamDetails, false); + pokemon.push(set); + } else { + set = this.randomAFDSet(species, teamDetails, true); + pokemon.unshift(set); + leadsRemaining--; + } + } else { + set = this.randomAFDSet(species, teamDetails, false); + pokemon.push(set); + } + + // Don't bother tracking details for the last Pokemon + if (pokemon.length === this.maxTeamSize) break; + + // Now that our Pokemon has passed all checks, we can increment our counters + baseFormes[species.baseSpecies] = 1; + + // Increment type counters + for (const typeName of types) { + if (typeName in typeCount) { + typeCount[typeName]++; + } else { + typeCount[typeName] = 1; + } + } + if (typeCombo in typeComboCount) { + typeComboCount[typeCombo]++; + } else { + typeComboCount[typeCombo] = 1; + } + + // Increment weakness counter + for (const typeName of this.dex.types.names()) { + // it's weak to the type + if (this.dex.getEffectiveness(typeName, species) > 0) { + typeWeaknesses[typeName]++; + } + if (this.dex.getEffectiveness(typeName, species) > 1) { + typeDoubleWeaknesses[typeName]++; + } + } + // Count Dry Skin/Fluffy as Fire weaknesses + if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) { + typeWeaknesses['Fire']++; + } + if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++; + if (weakToScald) typeWeaknesses['Scald']++; + + // Increment level 100 counter + if (set.level === 100) numMaxLevelPokemon++; + + // Track what the team has + if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1; + if (set.ability === 'Drought' || set.ability === 'Orichalcum Pulse' || set.moves.includes('sunnyday')) { + teamDetails.sun = 1; + } + if (set.ability === 'Sand Stream') teamDetails.sand = 1; + if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) { + teamDetails.snow = 1; + } + if (set.moves.includes('healbell')) teamDetails.statusCure = 1; + if (set.moves.includes('spikes') || set.moves.includes('ceaselessedge')) { + teamDetails.spikes = (teamDetails.spikes || 0) + 1; + } + if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 1; + if (set.moves.includes('stealthrock') || set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1; + if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1; + if (set.moves.includes('defog')) teamDetails.defog = 1; + if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1; + if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) { + teamDetails.screens = 1; + } + if (set.role === 'Tera Blast user' || ['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id)) { + teamDetails.teraBlast = 1; + } + } + if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built + throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`); + } + + return pokemon; + } +} + +export default RandomAFDTeams; diff --git a/data/mods/afd/scripts.ts b/data/mods/afd/scripts.ts new file mode 100644 index 0000000000..362e7c2185 --- /dev/null +++ b/data/mods/afd/scripts.ts @@ -0,0 +1,626 @@ +export const Scripts: ModdedBattleScriptsData = { + gen: 9, + init() { + for (const id in this.data.Pokedex) { + const species = this.data.Pokedex[id]; + if (species.isCosmeticForme) continue; + if (species.types.includes('Ground')) { + if (this.data.Learnsets[id]?.learnset) this.modData('Learnsets', id).learnset.thousandarrows = ['9L1']; + } + if (species.types.includes('Grass') && !species.types.includes('Fire')) { + if (this.data.Learnsets[id]?.learnset) this.modData('Learnsets', id).learnset.solarflare = ['9L1']; + } + const abilities = this.modData('Pokedex', id, true).abilities; + if (species.baseStats['atk'] >= 130) { + const hasHP = Object.values(abilities).includes('Huge Power') || + Object.values(abilities).includes('Pure Power'); + if (!hasHP) { + const slot = !abilities['1'] ? '1' : !abilities['H'] ? 'H' : 'S'; + abilities[slot] ||= 'Huge Power'; + } + } + const hasRegen = Object.values(abilities).includes('Regenerator'); + if (!hasRegen) { + const slot = !abilities['1'] ? '1' : !abilities['H'] ? 'H' : 'S'; + abilities[slot] ||= 'Regenerator'; + } + } + this.modData('Learnsets', 'tyranitar').learnset.shoreup = ['9L1']; + this.modData('Learnsets', 'bastiodon').learnset.blastiodon = ['9L1']; + this.modData('Learnsets', 'seaking').learnset.boltbeak = ['9L1']; + this.modData('Learnsets', 'seaking').learnset.fishiousrend = ['9L1']; + this.modData('Learnsets', 'ampharos').learnset.tailglow = ['9L1']; + this.modData('Learnsets', 'ampharos').learnset.dracometeor = ['9L1']; + this.modData('Learnsets', 'serperior').learnset.dracometeor = ['9L1']; + this.modData('Learnsets', 'serperior').learnset.overheat = ['9L1']; + this.modData('Learnsets', 'serperior').learnset.makeitrain = ['9L1']; + this.modData('Learnsets', 'rampardos').learnset.accelerock = ['9L1']; + this.modData('Learnsets', 'bibarel').learnset.bellydrum = ['9L1']; + this.modData('Learnsets', 'bibarel').learnset.storedpower = ['9L1']; + this.modData('Learnsets', 'bibarel').learnset.powertrip = ['9L1']; + this.modData('Learnsets', 'golisopod').learnset.bellydrum = ['9L1']; + this.modData('Learnsets', 'skuntank').learnset.shitpulse = ['9L1']; + this.modData('Learnsets', 'dusknoir').learnset = { explosion: ['9L1'] }; + for (const move of this.moves.all()) { + if (move.flags['bite']) { + this.modData('Learnsets', 'bruxish').learnset[move.id] = ['9L1']; + } + } + for (const moveid in this.data.Learnsets['incineroar'].learnset) { + if (this.moves.get(moveid).type === 'Dark') { + delete this.modData('Learnsets', 'incineroar').learnset[moveid]; + } + } + }, + actions: { + runMegaEvo(pokemon: Pokemon) { + const speciesid = pokemon.canMegaEvo || pokemon.canUltraBurst; + if (!speciesid) return false; + + pokemon.formeChange(speciesid, pokemon.getItem(), true); + + // Limit one mega evolution + pokemon.canMegaEvo = null; + + this.battle.runEvent('AfterMega', pokemon); + return true; + }, + switchIn(pokemon, pos, sourceEffect = null, isDrag) { + if (!pokemon || pokemon.isActive) { + this.battle.hint("A switch failed because the Pokémon trying to switch in is already in."); + return false; + } + + const side = pokemon.side; + if (pos >= side.active.length) { + throw new Error(`Invalid switch position ${pos} / ${side.active.length}`); + } + const oldActive = side.active[pos]; + const unfaintedActive = oldActive?.hp ? oldActive : null; + if (unfaintedActive) { + oldActive.beingCalledBack = true; + let switchCopyFlag: 'copyvolatile' | 'shedtail' | boolean = false; + if (sourceEffect && typeof (sourceEffect as Move).selfSwitch === 'string') { + switchCopyFlag = (sourceEffect as Move).selfSwitch!; + } + if (!oldActive.skipBeforeSwitchOutEventFlag && !isDrag) { + this.battle.runEvent('BeforeSwitchOut', oldActive); + if (this.battle.gen >= 5) { + this.battle.eachEvent('Update'); + } + } + oldActive.skipBeforeSwitchOutEventFlag = false; + if (!this.battle.runEvent('SwitchOut', oldActive)) { + // Warning: DO NOT interrupt a switch-out if you just want to trap a pokemon. + // To trap a pokemon and prevent it from switching out, (e.g. Mean Look, Magnet Pull) + // use the 'trapped' flag instead. + + // Note: Nothing in the real games can interrupt a switch-out (except Pursuit KOing, + // which is handled elsewhere); this is just for custom formats. + return false; + } + if (!oldActive.hp) { + // a pokemon fainted from Pursuit before it could switch + return 'pursuitfaint'; + } + + // will definitely switch out at this point + + this.battle.singleEvent('End', oldActive.getAbility(), oldActive.abilityState, oldActive); + this.battle.singleEvent('End', oldActive.getItem(), oldActive.itemState, oldActive); + + // if a pokemon is forced out by Whirlwind/etc or Eject Button/Pack, it can't use its chosen move + this.battle.queue.cancelAction(oldActive); + + let newMove = null; + if (this.battle.gen === 4 && sourceEffect) { + newMove = oldActive.lastMove; + } + if (switchCopyFlag) { + pokemon.copyVolatileFrom(oldActive, switchCopyFlag); + } + if (newMove) pokemon.lastMove = newMove; + oldActive.clearVolatile(); + } + if (oldActive) { + oldActive.isActive = false; + oldActive.isStarted = false; + oldActive.usedItemThisTurn = false; + oldActive.statsRaisedThisTurn = false; + oldActive.statsLoweredThisTurn = false; + oldActive.position = pokemon.position; + if (oldActive.fainted) oldActive.status = ''; + if (this.battle.gen <= 4) { + pokemon.lastItem = oldActive.lastItem; + oldActive.lastItem = ''; + } + pokemon.position = pos; + side.pokemon[pokemon.position] = pokemon; + side.pokemon[oldActive.position] = oldActive; + } + pokemon.isActive = true; + side.active[pos] = pokemon; + pokemon.activeTurns = 0; + pokemon.activeMoveActions = 0; + for (const moveSlot of pokemon.moveSlots) { + moveSlot.used = false; + } + pokemon.abilityState = this.battle.initEffectState({ id: pokemon.ability, target: pokemon }); + pokemon.itemState = this.battle.initEffectState({ id: pokemon.item, target: pokemon }); + this.battle.runEvent('BeforeSwitchIn', pokemon); + if (sourceEffect) { + this.battle.add(isDrag ? 'drag' : 'switch', pokemon, pokemon.getFullDetails, `[from] ${sourceEffect}`); + } else { + this.battle.add(isDrag ? 'drag' : 'switch', pokemon, pokemon.getFullDetails); + } + if (isDrag && this.battle.gen === 2) pokemon.draggedIn = this.battle.turn; + pokemon.previouslySwitchedIn++; + + if (isDrag && this.battle.gen >= 5) { + // runSwitch happens immediately so that Mold Breaker can make hazards bypass Clear Body and Levitate + this.runSwitch(pokemon); + } else { + this.battle.queue.insertChoice({ choice: 'runSwitch', pokemon }); + } + + if (pokemon.hasType('Flying')) { + this.battle.field.addPseudoWeather('Tailwind', pokemon); + } + + return true; + }, + useMoveInner(moveOrMoveName, pokemon, options) { + let target = options?.target; + let sourceEffect = options?.sourceEffect; + const zMove = options?.zMove; + const maxMove = options?.maxMove; + if (!sourceEffect && this.battle.effect.id) sourceEffect = this.battle.effect; + if (sourceEffect && ['instruct', 'custapberry'].includes(sourceEffect.id)) sourceEffect = null; + + let move = this.dex.getActiveMove(moveOrMoveName); + pokemon.lastMoveUsed = move; + if (move.id === 'weatherball' && zMove) { + // Z-Weather Ball only changes types if it's used directly, + // not if it's called by Z-Sleep Talk or something. + this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move); + if (move.type !== 'Normal') sourceEffect = move; + } + if (zMove || (move.category !== 'Status' && sourceEffect && (sourceEffect as ActiveMove).isZ)) { + move = this.getActiveZMove(move, pokemon); + } + if (maxMove && move.category !== 'Status') { + // Max move outcome is dependent on the move type after type modifications from ability and the move itself + this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move); + this.battle.runEvent('ModifyType', pokemon, target, move, move); + } + if (maxMove || (move.category !== 'Status' && sourceEffect && (sourceEffect as ActiveMove).isMax)) { + move = this.getActiveMaxMove(move, pokemon); + } + + if (this.battle.activeMove) { + move.priority = this.battle.activeMove.priority; + if (!move.hasBounced) move.pranksterBoosted = this.battle.activeMove.pranksterBoosted; + } + const baseTarget = move.target; + let targetRelayVar = { target }; + targetRelayVar = this.battle.runEvent('ModifyTarget', pokemon, target, move, targetRelayVar, true); + if (targetRelayVar.target !== undefined) target = targetRelayVar.target; + if (target === undefined) target = this.battle.getRandomTarget(pokemon, move); + if (move.target === 'self' || move.target === 'allies') { + target = pokemon; + } + if (sourceEffect) { + move.sourceEffect = sourceEffect.id; + move.ignoreAbility = (sourceEffect as ActiveMove).ignoreAbility; + } + let moveResult = false; + + this.battle.setActiveMove(move, pokemon, target); + + this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move); + this.battle.singleEvent('ModifyMove', move, null, pokemon, target, move, move); + if (baseTarget !== move.target) { + // Target changed in ModifyMove, so we must adjust it here + // Adjust before the next event so the correct target is passed to the + // event + target = this.battle.getRandomTarget(pokemon, move); + } + move = this.battle.runEvent('ModifyType', pokemon, target, move, move); + move = this.battle.runEvent('ModifyMove', pokemon, target, move, move); + if (baseTarget !== move.target) { + // Adjust again + target = this.battle.getRandomTarget(pokemon, move); + } + if (!move || pokemon.fainted) { + return false; + } + + let attrs = ''; + + let movename = move.name; + if (move.id === 'hiddenpower') movename = 'Hidden Power'; + if (sourceEffect) attrs += `|[from] ${sourceEffect.fullname}`; + if (zMove && move.isZ === true) { + attrs = `|[anim]${movename}${attrs}`; + movename = `Z-${movename}`; + } + this.battle.addMove('move', pokemon, movename, `${target}${attrs}`); + + if (zMove) this.runZPower(move, pokemon); + + if (!target) { + this.battle.attrLastMove('[notarget]'); + this.battle.add(this.battle.gen >= 5 ? '-fail' : '-notarget', pokemon); + return false; + } + + const { targets, pressureTargets } = pokemon.getMoveTargets(move, target); + if (targets.length) { + target = targets[targets.length - 1]; // in case of redirection + } + + const callerMoveForPressure = sourceEffect && (sourceEffect as ActiveMove).pp ? sourceEffect as ActiveMove : null; + if (!sourceEffect || callerMoveForPressure || sourceEffect.id === 'pursuit') { + let extraPP = 0; + for (const source of pressureTargets) { + const ppDrop = this.battle.runEvent('DeductPP', source, pokemon, move); + if (ppDrop !== true) { + extraPP += ppDrop || 0; + } + } + if (extraPP > 0) { + pokemon.deductPP(callerMoveForPressure || moveOrMoveName, extraPP); + } + } + + let tryMoveResult = this.battle.singleEvent('TryMove', move, null, pokemon, target, move); + if (tryMoveResult) { + tryMoveResult = this.battle.runEvent('TryMove', pokemon, target, move); + } + if (!tryMoveResult) { + move.mindBlownRecoil = false; + return tryMoveResult; + } + + this.battle.singleEvent('UseMoveMessage', move, null, pokemon, target, move); + + if (move.ignoreImmunity === undefined) { + move.ignoreImmunity = (move.category === 'Status'); + } + + if (this.battle.gen !== 4 && move.selfdestruct === 'always') { + this.battle.faint(pokemon, pokemon, move); + } + + let damage: number | false | undefined | '' = false; + if (move.target === 'all' || move.target === 'foeSide' || move.target === 'allySide' || move.target === 'allyTeam') { + damage = this.tryMoveHit(targets, pokemon, move); + if (damage === this.battle.NOT_FAIL) pokemon.moveThisTurnResult = null; + if (damage || damage === 0 || damage === undefined) moveResult = true; + } else { + if (!targets.length) { + this.battle.attrLastMove('[notarget]'); + this.battle.add(this.battle.gen >= 5 ? '-fail' : '-notarget', pokemon); + return false; + } + if (this.battle.gen === 4 && move.selfdestruct === 'always') { + this.battle.faint(pokemon, pokemon, move); + } + moveResult = this.trySpreadMoveHit(targets, pokemon, move); + } + if (move.selfBoost && moveResult) this.moveHit(pokemon, pokemon, move, move.selfBoost, false, true); + if (!pokemon.hp) { + this.battle.faint(pokemon, pokemon, move); + } + + if (!moveResult) { + this.battle.singleEvent('MoveFail', move, null, target, pokemon, move); + return false; + } + + if (!(move.hasSheerForce && pokemon.hasAbility('sheerforce')) && !move.flags['futuremove']) { + const originalHp = pokemon.hp; + this.battle.singleEvent('AfterMoveSecondarySelf', move, null, pokemon, target, move); + this.battle.runEvent('AfterMoveSecondarySelf', pokemon, target, move); + if (pokemon && pokemon !== target && move.category !== 'Status') { + if (pokemon.hp <= pokemon.maxhp / 2 && originalHp > pokemon.maxhp / 2) { + this.battle.runEvent('EmergencyExit', pokemon, pokemon); + } + } + } + + return true; + }, + canTerastallize(pokemon: Pokemon) { + if (this.dex.gen !== 9) { + return null; + } + return pokemon.teraType; + }, + canMegaEvo(pokemon) { + const species = pokemon.baseSpecies; + const altForme = species.otherFormes && this.dex.species.get(species.otherFormes[0]); + const item = pokemon.getItem(); + // Mega Rayquaza + if ((this.battle.gen <= 7 || this.battle.ruleTable.has('+pokemontag:past') || + this.battle.ruleTable.has('+pokemontag:future')) && + altForme?.isMega && altForme?.requiredMove && + pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) { + return altForme.name; + } + if (species.baseSpecies === 'Magearna' && !species.isMega) { + return species.name.includes('Original') ? 'Magearna-Original-Mega' : 'Magearna-Mega'; + } + if (!item.megaStone) return null; + return item.megaStone[species.name]; + }, + modifyDamage(baseDamage, pokemon, target, move, suppressMessages = false) { + const tr = this.battle.trunc; + if (!move.type) move.type = '???'; + const type = move.type; + + baseDamage += 2; + + if (move.spreadHit) { + // multi-target modifier (doubles only) + const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75; + this.battle.debug(`Spread modifier: ${spreadModifier}`); + baseDamage = this.battle.modify(baseDamage, spreadModifier); + } else if (move.multihitType === 'parentalbond' && move.hit > 1) { + // Parental Bond modifier + const bondModifier = this.battle.gen > 6 ? 0.25 : 0.5; + this.battle.debug(`Parental Bond modifier: ${bondModifier}`); + baseDamage = this.battle.modify(baseDamage, bondModifier); + } + + // weather modifier + baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage); + + // crit - not a modifier + const isCrit = target.getMoveHitData(move).crit; + if (isCrit) { + baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2))); + } + + // random factor - also not a modifier + baseDamage = this.battle.randomizer(baseDamage); + + // STAB + // The "???" type never gets STAB + // Not even if you Roost in Gen 4 and somehow manage to use + // Struggle in the same turn. + // (On second thought, it might be easier to get a MissingNo.) + if (type !== '???') { + let stab: number | [number, number] = 1; + + const pokeTypes = pokemon.getTypes(false, true); + const isPrimarySTAB = move.forceSTAB || (pokemon.hasType(type) && pokeTypes[0] === type); + const isSecondarySTAB = move.forceSTAB || (pokemon.hasType(type) && pokeTypes.length > 1 && pokeTypes[1] === type); + const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type); + if (isPrimarySTAB) { + stab = 1.7; + } + if (isSecondarySTAB) { + stab = 1.2; + } + + // The Stellar tera type makes this incredibly confusing + // If the move's type does not match one of the user's base types, + // the Stellar tera type applies a one-time 1.2x damage boost for that type. + // + // If the move's type does match one of the user's base types, + // then the Stellar tera type applies a one-time 2x STAB boost for that type, + // and then goes back to using the regular 1.5x STAB boost for those types. + if (pokemon.terastallized === 'Stellar') { + if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) { + stab = isSTAB ? 2.3 : [4915, 4096]; + move.stellarBoosted = true; + if (pokemon.species.name !== 'Terapagos-Stellar') { + pokemon.stellarBoostedTypes.push(type); + } + } + } else { + if (pokemon.terastallized === type && pokeTypes.includes(type)) { + stab = 2.3; + } + stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab); + } + + baseDamage = this.battle.modify(baseDamage, stab); + } + + // types + let typeMod = target.runEffectiveness(move); + typeMod = this.battle.clampIntRange(typeMod, -6, 6); + target.getMoveHitData(move).typeMod = typeMod; + if (typeMod > 0) { + if (!suppressMessages) this.battle.add('-supereffective', target); + + for (let i = 0; i < typeMod; i++) { + baseDamage *= 2; + } + } + if (typeMod < 0) { + if (!suppressMessages) this.battle.add('-resisted', target); + + for (let i = 0; i > typeMod; i--) { + baseDamage = tr(baseDamage / 2); + } + } + + if (isCrit && !suppressMessages) this.battle.add('-crit', target); + + if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) { + if (this.battle.gen < 6 || move.id !== 'facade') { + baseDamage = this.battle.modify(baseDamage, 0.5); + } + } + + if (pokemon.status === 'psn' && move.category === 'Special') { + if (this.battle.gen < 6 || move.id !== 'facade') { + baseDamage = this.battle.modify(baseDamage, 0.5); + } + } + + // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers + if (this.battle.gen === 5 && !baseDamage) baseDamage = 1; + + // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb. + baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage); + + const bypassProtect = target.getMoveHitData(move).bypassProtect; + if (bypassProtect) { + baseDamage = this.battle.modify(baseDamage, 0.25); + if (bypassProtect !== true && bypassProtect.effectType === 'Ability') { + this.battle.add('-ability', pokemon, bypassProtect.name); + } + this.battle.add('-zbroken', target); + } + + // Generation 6-7 moves the check for minimum 1 damage after the final modifier... + if (this.battle.gen !== 5 && !baseDamage) return 1; + + // ...but 16-bit truncation happens even later, and can truncate to 0 + return tr(baseDamage, 16); + }, + getDamage(source, target, move, suppressMessages = false) { + if (typeof move === 'string') move = this.dex.getActiveMove(move); + + if (typeof move === 'number') { + const basePower = move; + move = new Dex.Move({ + basePower, + type: '???', + category: 'Physical', + willCrit: false, + }) as ActiveMove; + move.hit = 0; + } + + if (!target.runImmunity(move, !suppressMessages)) { + return false; + } + + if (move.ohko) return this.battle.gen === 3 ? target.hp : target.maxhp; + if (move.damageCallback) return move.damageCallback.call(this.battle, source, target); + if (move.damage === 'level') { + return source.level; + } else if (move.damage) { + return move.damage; + } + + let category = this.battle.getCategory(move); + + let basePower: number | false | null = move.basePower; + if (move.basePowerCallback) { + basePower = move.basePowerCallback.call(this.battle, source, target, move); + } + if (!basePower) return basePower === 0 ? undefined : basePower; + basePower = this.battle.clampIntRange(basePower, 1); + if (move.type === 'Electric' && move.category === 'Physical') { + basePower += 15; + category = 'Special'; + } + + let critMult; + let critRatio = this.battle.runEvent('ModifyCritRatio', source, target, move, move.critRatio || 0); + if (this.battle.gen <= 5) { + critRatio = this.battle.clampIntRange(critRatio, 0, 5); + critMult = [0, 16, 8, 4, 3, 2]; + } else { + critRatio = this.battle.clampIntRange(critRatio, 0, 4); + if (this.battle.gen === 6) { + critMult = [0, 16, 8, 2, 1]; + } else { + critMult = [0, 24, 8, 2, 1]; + } + } + + const moveHit = target.getMoveHitData(move); + moveHit.crit = move.willCrit || false; + if (move.willCrit === undefined) { + if (critRatio) { + moveHit.crit = this.battle.randomChance(1, critMult[critRatio]); + } + } + + if (moveHit.crit) { + moveHit.crit = this.battle.runEvent('CriticalHit', target, null, move); + } + + // happens after crit calculation + basePower = this.battle.runEvent('BasePower', source, target, move, basePower, true); + + if (!basePower) return 0; + basePower = this.battle.clampIntRange(basePower, 1); + // Hacked Max Moves have 0 base power, even if you Dynamax + if ((!source.volatiles['dynamax'] && move.isMax) || (move.isMax && this.dex.moves.get(move.baseMove).isMax)) { + basePower = 0; + } + + const dexMove = this.dex.moves.get(move.id); + if (source.terastallized && (source.terastallized === 'Stellar' ? + !source.stellarBoostedTypes.includes(move.type) : source.hasType(move.type)) && + basePower < 60 && dexMove.priority <= 0 && !dexMove.multihit && + // Hard move.basePower check for moves like Dragon Energy that have variable BP + !((move.basePower === 0 || move.basePower === 150) && move.basePowerCallback) + ) { + basePower = 60; + } + + const level = source.level; + + const attacker = move.overrideOffensivePokemon === 'target' ? target : source; + const defender = move.overrideDefensivePokemon === 'source' ? source : target; + + const isPhysical = move.category === 'Physical'; + let attackStat: StatIDExceptHP = move.overrideOffensiveStat || (isPhysical ? 'atk' : 'spa'); + const defenseStat: StatIDExceptHP = move.overrideDefensiveStat || (isPhysical ? 'def' : 'spd'); + + const statTable = { atk: 'Atk', def: 'Def', spa: 'SpA', spd: 'SpD', spe: 'Spe' }; + + let atkBoosts = attacker.boosts[attackStat]; + let defBoosts = defender.boosts[defenseStat]; + + let ignoreNegativeOffensive = !!move.ignoreNegativeOffensive; + let ignorePositiveDefensive = !!move.ignorePositiveDefensive; + + if (moveHit.crit) { + ignoreNegativeOffensive = true; + ignorePositiveDefensive = true; + } + const ignoreOffensive = !!(move.ignoreOffensive || (ignoreNegativeOffensive && atkBoosts < 0)); + const ignoreDefensive = !!(move.ignoreDefensive || (ignorePositiveDefensive && defBoosts > 0)); + + if (ignoreOffensive) { + this.battle.debug('Negating (sp)atk boost/penalty.'); + atkBoosts = 0; + } + if (ignoreDefensive) { + this.battle.debug('Negating (sp)def boost/penalty.'); + defBoosts = 0; + } + + let attack = attacker.calculateStat(attackStat, atkBoosts, 1, source); + let defense = defender.calculateStat(defenseStat, defBoosts, 1, target); + + attackStat = (category === 'Physical' ? 'atk' : 'spa'); + + // Apply Stat Modifiers + attack = this.battle.runEvent('Modify' + statTable[attackStat], source, target, move, attack); + defense = this.battle.runEvent('Modify' + statTable[defenseStat], target, source, move, defense); + + if (this.battle.gen <= 4 && ['explosion', 'selfdestruct'].includes(move.id) && defenseStat === 'def') { + defense = this.battle.clampIntRange(Math.floor(defense / 2), 1); + } + + const tr = this.battle.trunc; + + // int(int(int(2 * L / 5 + 2) * A * P / D) / 50); + const baseDamage = tr(tr(tr(tr(2 * level / 5 + 2) * basePower * attack) / defense) / 50); + + // Calculate damage modifiers separately (order differs between generations) + return this.modifyDamage(baseDamage, source, target, move, suppressMessages); + }, + }, +}; diff --git a/data/mods/afd/sets.json b/data/mods/afd/sets.json new file mode 100644 index 0000000000..8e440de574 --- /dev/null +++ b/data/mods/afd/sets.json @@ -0,0 +1,1052 @@ +{ + "clefablemega": { + "level": 82, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Dazzling Gleam", "Flamethrower", "Moonlight", "Stealth Rock", "Thunder Wave"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "victreebelmega": { + "level": 86, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Knock Off", "Power Whip", "Sludge Bomb", "Strength Sap"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "starmiemega": { + "level": 78, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Aqua Jet", "Bulk Up", "Triple Axel", "Waterfall", "Zen Headbutt"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + }, + { + "role": "Bulky Support", + "movepool": ["Flip Turn", "Rapid Spin", "Recover", "Zen Headbutt"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + } + ] + }, + "dragonitemega": { + "level": 74, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Air Slash", "Draco Meteor", "Fire Blast", "Hurricane", "Iron Head", "Roost"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "meganiummega": { + "level": 74, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Encore", "Solar Beam", "Synthesis", "Weather Ball"], + "abilities": ["Mega Sol"], + "teraTypes": ["Fire", "Ghost"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Encore", "Solar Beam", "Synthesis", "Solar Flare"], + "abilities": ["Mega Sol"], + "teraTypes": ["Fire", "Ghost"] + } + ] + }, + "feraligatrmega": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Body Slam", "Double-Edge", "Dragon Dance", "Earthquake", "Liquidation"], + "abilities": ["Dragonize"], + "teraTypes": ["Dragon", "Ghost"] + } + ] + }, + "emboarmega": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Bulk Up", "Drain Punch", "Flare Blitz", "Trailblaze"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "skarmorymega": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Brave Bird", "Drill Run", "Roost", "Swords Dance"], + "abilities": ["Huge Power"], + "teraTypes": ["Ground"] + } + ] + }, + "froslassmega": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Aurora Veil", "Blizzard", "Nasty Plot", "Shadow Ball"], + "abilities": ["Snow Warning"], + "teraTypes": ["Fairy"] + } + ] + }, + "excadrillmega": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Iron Head", "Rock Slide", "Sandstorm", "Thousand Arrows"], + "abilities": ["It's Excadrillin' Time!"], + "teraTypes": ["Ghost"] + } + ] + }, + "scolipedemega": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Megahorn", "Poison Jab", "Protect", "Swords Dance"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + } + ] + }, + "scraftymega": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Drain Punch", "Knock Off", "Poison Jab"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + } + ] + }, + "eelektrossmega": { + "level": 80, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Flamethrower", "Giga Drain", "Volt Switch", "Wild Charge"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "chandeluremega": { + "level": 75, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Calm Mind", "Fire Blast", "Flame Charge", "Shadow Ball"], + "abilities": ["Shadow Tag"], + "teraTypes": ["Fairy", "Ghost", "Grass"] + } + ] + }, + "chesnaughtmega": { + "level": 80, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Body Press", "Iron Defense", "Synthesis", "Wood Hammer"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "delphoxmega": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Fire Blast", "Grass Knot", "Nasty Plot", "Psyshock"], + "abilities": ["Discourage"], + "teraTypes": ["Ghost"] + } + ] + }, + "greninjamega": { + "level": 80, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Dark Pulse", "Gunk Shot", "Hydro Pump", "Ice Beam"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost", "Poison"] + } + ] + }, + "pyroarmega": { + "level": 80, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Dark Pulse", "Fire Blast", "Hyper Voice", "Will-O-Wisp"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "floettemega": { + "level": 88, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Dazzling Gleam", "Protect", "Wish"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "malamarmega": { + "level": 80, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Knock Off", "Rest", "Sleep Talk", "Superpower"], + "abilities": ["Contrary"], + "teraTypes": ["Fighting", "Ghost"] + } + ] + }, + "barbaraclemega": { + "level": 78, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Cross Chop", "Earthquake", "Liquidation", "Shell Smash", "Stone Edge"], + "abilities": ["Huge Power"], + "teraTypes": ["Fighting", "Ghost"] + } + ] + }, + "dragalgemega": { + "level": 84, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Draco Meteor", "Flip Turn", "Sludge Wave", "Toxic", "Toxic Spikes"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "hawluchamega": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Brave Bird", "Drain Punch", "Swords Dance", "Throat Chop"], + "abilities": ["Huge Power"], + "teraTypes": ["Fighting", "Ghost"] + } + ] + }, + "zygardemega": { + "level": 72, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Core Enforcer", "Earth Power", "Glare", "Sludge Wave"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost", "Poison"] + } + ] + }, + "drampamega": { + "level": 80, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Defog", "Draco Meteor", "Fire Blast", "Glare", "Hyper Voice", "Roost"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "falinksmega": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Body Slam", "Close Combat", "Knock Off", "Swords Dance"], + "abilities": ["No Retreat"], + "teraTypes": ["Ghost"] + } + ] + }, + "raichumegax": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Body Slam", "Encore", "Knock Off", "Nuzzle", "Play Rough", "Volt Switch", "Volt Tackle"], + "abilities": ["Huge Power"], + "teraTypes": ["Dark", "Fairy", "Normal"] + } + ] + }, + "raichumegay": { + "level": 80, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Encore", "Grass Knot", "Nuzzle", "Surf", "Volt Switch", "Volt Tackle"], + "abilities": ["Regenerator"], + "teraTypes": ["Grass", "Water"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Alluring Voice", "Encore", "Grass Knot", "Nasty Plot", "Surf", "Volt Tackle"], + "abilities": ["Regenerator"], + "teraTypes": ["Grass", "Water"] + } + ] + }, + "chimechomega": { + "level": 86, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Cosmic Power", "Dazzling Gleam", "Recover", "Stored Power"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "baxcaliburmega": { + "level": 75, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Dragon Dance", "Earthquake", "Glaive Rush", "Icicle Crash"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + } + ] + }, + "zeraoramega": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Plasma Fists"], + "abilities": ["Huge Power"], + "teraTypes": ["Fighting", "Ghost"] + } + ] + }, + "absolmegaz": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Double-Edge", "Play Rough", "Sucker Punch", "Swords Dance"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + } + ] + }, + "lucariomegaz": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Aura Sphere", "Dark Pulse", "Flash Cannon", "Nasty Plot"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "garchompmegaz": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Double-Edge", "Outrage", "Swords Dance", "Thousand Arrows"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + }, + { + "role": "Fast Attacker", + "movepool": ["Draco Meteor", "Fire Blast", "Stealth Rock", "Thousand Arrows"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + } + ] + }, + "golurkmega": { + "level": 75, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Ice Punch", "Poltergeist", "Stealth Rock", "Thousand Arrows"], + "abilities": ["Huge Power"], + "teraTypes": ["Steel"] + } + ] + }, + "crabominablemega": { + "level": 80, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Earthquake", "Ice Hammer"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + } + ] + }, + "meowsticfmega": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Alluring Voice", "Nasty Plot", "Psychic", "Psyshock", "Shadow Ball"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "golisopodmega": { + "level": 75, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Close Combat", "First Impression", "Iron Head", "Pain Split", "Spikes"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + }, + { + "role": "Bulky Setup", + "movepool": ["Belly Drum", "Close Combat", "Iron Head", "Leech Life"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + } + ] + }, + "staraptormega": { + "level": 75, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Brave Bird", "Close Combat", "Thief", "U-turn"], + "abilities": ["Huge Power"], + "teraTypes": ["Ghost"] + } + ] + }, + "tatsugiricurlymega": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Pulse", "Hydro Pump", "Nasty Plot", "Rapid Spin"], + "abilities": ["Parental Bond"], + "teraTypes": ["Ghost"] + } + ] + }, + "glimmoramega": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Earth Power", "Meteor Beam", "Sandstorm", "Sludge Wave"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "magearnamega": { + "level": 72, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Aura Sphere", "Flash Cannon", "Fleur Cannon", "Agility"], + "abilities": ["Soul-Heart"], + "teraTypes": ["Ghost"] + } + ] + }, + "heatranmega": { + "level": 78, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Earth Power", "Heavy Slam", "Lava Plume", "Magma Storm", "Stealth Rock"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "darkraimega": { + "level": 78, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Dark Pulse", "Sludge Bomb", "Will-O-Wisp"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "scovillainmega": { + "level": 86, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Giga Drain", "Leaf Storm", "Leech Seed", "Overheat"], + "abilities": ["Contrary"], + "teraTypes": ["Ghost"] + } + ] + }, + "noivern": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Boomburst", "Draco Meteor", "Flamethrower", "Hurricane", "U-turn"], + "abilities": ["Regenerator"], + "teraTypes": ["Normal"] + }, + { + "role": "Fast Support", + "movepool": ["Defog", "Draco Meteor", "Boomburst", "Roost"], + "abilities": ["Regenerator"], + "teraTypes": ["Normal"] + } + ] + }, + "kingambit": { + "level": 74, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Iron Head", "Low Kick", "Sucker Punch", "Swords Dance"], + "abilities": ["Supreme Overlord"], + "teraTypes": ["Ghost"] + } + ] + }, + "tatsugiri": { + "level": 84, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Dragon Pulse", "Hydro Pump", "Nasty Plot", "Rapid Spin"], + "abilities": ["Parental Bond"], + "teraTypes": ["Ghost"] + } + ] + }, + "lickilicky": { + "level": 89, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Body Slam", "Knock Off", "Protect", "Wish"], + "abilities": ["Chaos Saliva"], + "teraTypes": ["Ghost"] + }, + { + "role": "AV Pivot", + "movepool": ["Body Slam", "Dragon Tail", "Earthquake", "Explosion", "Knock Off", "Power Whip"], + "abilities": ["Chaos Saliva"], + "teraTypes": ["Ghost"] + }, + { + "role": "Bulky Setup", + "movepool": ["Body Slam", "Earthquake", "Explosion", "Knock Off", "Power Whip", "Swords Dance"], + "abilities": ["Chaos Saliva"], + "teraTypes": ["Ghost"] + } + ] + }, + "skuntank": { + "level": 85, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dark Pulse", "Fire Blast", "Nasty Plot", "Shit Pulse"], + "abilities": ["Mega Launcher"], + "teraTypes": ["Ghost"] + } + ] + }, + "hatterene": { + "level": 85, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Dark Pulse", "Draining Kiss", "Psyshock"], + "abilities": ["Magic Bounce"], + "teraTypes": ["Fairy"] + }, + { + "role": "AV Pivot", + "movepool": ["Nuzzle", "Dark Pulse", "Draining Kiss", "Psyshock"], + "abilities": ["Magic Bounce", "Regenerator"], + "teraTypes": ["Fairy"] + } + ] + }, + "clawitzer": { + "level": 80, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "Water Pulse"], + "abilities": ["Super Mega Launcher"], + "teraTypes": ["Dragon"] + } + ] + }, + "conkeldurr": { + "level": 80, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Ice Punch", "Mach Punch"], + "abilities": ["Iron Fist"], + "teraTypes": ["Ghost", "Steel"] + } + ] + }, + "hitmonchan": { + "level": 80, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Drain Punch", "Ice Punch", "Mach Punch", "Mega Punch"], + "abilities": ["Iron Fist"], + "teraTypes": ["Ghost", "Steel"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Drain Punch", "Ice Punch", "Mach Punch", "Swords Dance"], + "abilities": ["Iron Fist"], + "teraTypes": ["Ghost", "Steel"] + } + ] + }, + "smeargle": { + "level": 90, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Spore", "Sticky Web", "Stealth Rock", "Topsy-Turvy"], + "abilities": ["Prankster"], + "teraTypes": ["Ghost"] + } + ] + }, + "hippowdon": { + "level": 80, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Roar", "Slack Off", "Stealth Rock", "Thousand Arrows"], + "abilities": ["Sand Stream"], + "teraTypes": ["Ghost", "Steel"] + } + ] + }, + "tinglu": { + "level": 80, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Spikes", "Stealth Rock", "Thousand Arrows", "Whirlwind"], + "abilities": ["Vessel of Ruin"], + "teraTypes": ["Ghost", "Steel"] + } + ] + }, + "spidops": { + "level": 86, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Circle Throw", "First Impression", "Sucker Punch", "U-turn"], + "abilities": ["Regenerator", "Stakeout"], + "teraTypes": ["Ghost"] + }, + { + "role": "Bulky Support", + "movepool": ["Circle Throw", "First Impression", "Sticky Web", "Sucker Punch", "U-turn"], + "abilities": ["Regenerator", "Stakeout"], + "teraTypes": ["Ghost"] + } + ] + }, + "regidrago": { + "level": 75, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Dragon Dance", "Earthquake", "Explosion", "Outrage"], + "abilities": ["Dragon's Maw"], + "teraTypes": ["Normal"] + }, + { + "role": "Fast Attacker", + "movepool": ["Draco Meteor", "Dragon Energy", "Earthquake", "Explosion"], + "abilities": ["Dragon's Maw"], + "teraTypes": ["Dragon", "Normal"] + } + ] + }, + "minior": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Acrobatics", "Earthquake", "Explosion", "Shell Smash"], + "abilities": ["Regenerator"], + "teraTypes": ["Normal"] + } + ] + }, + "calyrexmonarch": { + "level": 80, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Body Press", "Dark Void", "Leaf Storm", "Photon Geyser"], + "abilities": ["Regenerator"], + "teraTypes": ["Fighting"] + } + ] + }, + "celesteela": { + "level": 100, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Explosion", "Leech Seed", "Metal Sound", "Stealth Rock"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "dusknoir": { + "level": 100, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Explosion"], + "abilities": ["Damp"], + "teraTypes": ["Dark"] + } + ] + }, + "regigigas": { + "level": 65, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Body Slam", "Crush Grip", "Drain Punch", "Knock Off"], + "abilities": ["Fast Start"], + "teraTypes": ["Ghost"] + } + ] + }, + "incineroar2": { + "level": 80, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Close Combat", "Gigaton Hammer", "Poltergeist", "Shadow Sneak", "U-turn"], + "abilities": ["Intimidate 2"], + "teraTypes": ["Ghost"] + }, + { + "role": "Fast Attacker", + "movepool": ["Close Combat", "Gigaton Hammer", "King's Shield", "Poltergeist"], + "abilities": ["Intimidate 2"], + "teraTypes": ["Fighting"] + }, + { + "role": "Fast Attacker", + "movepool": ["Gigaton Hammer", "King's Shield", "Poltergeist", "Shadow Sneak"], + "abilities": ["Intimidate 2"], + "teraTypes": ["Ghost"] + } + ] + }, + "incineroar": { + "level": 88, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Close Combat", "Fake Out", "Flare Blitz", "U-turn"], + "abilities": ["Intimidate"], + "teraTypes": ["Ghost"] + } + ] + }, + "bibarel": { + "level": 75, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Body Slam", "Power Trip", "Stored Power", "Work Up"], + "abilities": ["Simple"], + "teraTypes": ["Ghost"] + }, + { + "role": "Bulky Setup", + "movepool": ["Belly Drum", "Body Slam", "Power Trip", "Waterfall"], + "abilities": ["Unaware"], + "teraTypes": ["Dark", "Ghost"] + } + ] + }, + "tapufini": { + "level": 85, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dazzling Gleam", "Misty Explosion", "Surf"], + "abilities": ["Misty Surge"], + "teraTypes": ["Ghost"] + }, + { + "role": "Bulky Setup", + "movepool": ["Belly Drum", "Body Slam", "Power Trip", "Waterfall"], + "abilities": ["Unaware"], + "teraTypes": ["Ghost"] + } + ] + }, + "swampert": { + "level": 87, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Ice Punch", "Liquidation", "Thousand Arrows"], + "abilities": ["Sap Sipper"], + "teraTypes": ["Ghost"] + }, + { + "role": "Bulky Setup", + "movepool": ["Flip Turn", "Knock Off", "Stealth Rock", "Thousand Arrows"], + "abilities": ["Sap Sipper"], + "teraTypes": ["Ghost"] + } + ] + }, + "serperior": { + "level": 77, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Draco Meteor", "Leaf Storm", "Overheat", "Synthesis"], + "abilities": ["Contrary"], + "teraTypes": ["Dragon", "Fire", "Ghost"] + } + ] + }, + "rampardos": { + "level": 90, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Accelerock", "Earthquake", "Head Smash", "Stone Edge"], + "abilities": ["Rocky Payload"], + "teraTypes": ["Rock"] + } + ] + }, + "simisage": { + "level": 80, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Gunk Shot", "Leaf Storm", "Superpower", "Synthesis"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost", "Poison"] + } + ] + }, + "bruxish": { + "level": 75, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Crunch", "Fishious Rend", "Flip Turn", "Psychic Fangs"], + "abilities": ["Strong Jaw"], + "teraTypes": ["Water"] + } + ] + }, + "mewtwo": { + "level": 72, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Aura Sphere", "Dark Pulse", "Fire Blast", "Nasty Plot", "Psystrike", "Recover"], + "abilities": ["Neuroforce"], + "teraTypes": ["Dark", "Fighting", "Fire", "Psychic"] + } + ] + }, + "mew": { + "level": 82, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Encore", "Knock Off", "Psychic", "Psychic Noise", "Stealth Rock", "Toxic Spikes", "U-turn", "Will-O-Wisp"], + "abilities": ["Regenerator"], + "teraTypes": ["Dark", "Fairy", "Steel"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Close Combat", "Knock Off", "Leech Life", "Psychic Fangs", "Swords Dance"], + "abilities": ["Neuroforce"], + "teraTypes": ["Fighting"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Aura Sphere", "Bug Buzz", "Dark Pulse", "Earth Power", "Fire Blast", "Hydro Pump", "Nasty Plot", "Psychic", "Psyshock"], + "abilities": ["Neuroforce"], + "teraTypes": ["Dark", "Fighting", "Fire", "Ground", "Psychic", "Water"] + } + ] + }, + "honchkrow": { + "level": 86, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Brave Bird", "Heat Wave", "Sucker Punch", "U-turn"], + "abilities": ["Moxie", "Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "cacturne": { + "level": 92, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Knock Off", "Leaf Storm", "Spikes", "Sucker Punch", "Toxic Spikes"], + "abilities": ["Regenerator", "Water Absorb"], + "teraTypes": ["Ghost"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Drain Punch", "Seed Bomb", "Sucker Punch", "Swords Dance"], + "abilities": ["Water Absorb"], + "teraTypes": ["Ghost"] + } + ] + }, + "brutebonnet": { + "level": 81, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Close Combat", "Seed Bomb", "Spore", "Sucker Punch"], + "abilities": ["Protosynthesis"], + "teraTypes": ["Fighting", "Ghost"] + } + ] + }, + "ampharosmega": { + "level": 85, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Dragon Pulse", "Tail Glow", "Thunderbolt", "Trailblaze"], + "abilities": ["Regenerator"], + "teraTypes": ["Electric", "Ghost"] + } + ] + }, + "gallademega": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Night Slash", "Psycho Cut", "Sacred Sword", "Swords Dance"], + "abilities": ["Sharpness"], + "teraTypes": ["Dark", "Fighting", "Ghost"] + } + ] + }, + "infernape": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Drain Punch", "Fire Punch", "Mach Punch", "Swords Dance"], + "abilities": ["Iron Fist"], + "teraTypes": ["Ghost", "Fighting"] + } + ] + }, + "tyranitar": { + "level": 78, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Dark Pulse", "Fire Blast", "Hydro Pump", "Ice Beam", "Meteor Beam", "Shore Up", "Thunder Wave"], + "abilities": ["Sand Stream"], + "teraTypes": ["Ghost"] + } + ] + }, + "bastiodon": { + "level": 89, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Blastiodon", "Body Press", "Foul Play", "Iron Defense"], + "abilities": ["Regenerator"], + "teraTypes": ["Ghost"] + } + ] + }, + "seaking": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Bolt Beak", "Fishious Rend", "Flip Turn", "Megahorn"], + "abilities": ["Lightning Rod", "Regenerator"], + "teraTypes": ["Electric"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Agility", "Bolt Beak", "Fishious Rend", "Megahorn"], + "abilities": ["Lightning Rod"], + "teraTypes": ["Electric"] + } + ] + } +} diff --git a/data/mods/afd/typechart.ts b/data/mods/afd/typechart.ts new file mode 100644 index 0000000000..8b505aad04 --- /dev/null +++ b/data/mods/afd/typechart.ts @@ -0,0 +1,49 @@ +export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = { + fairy: { + damageTaken: { + Bug: 2, + Dark: 2, + Dragon: 3, + Electric: 0, + Fairy: 0, + Fighting: 2, + Fire: 0, + Flying: 0, + Ghost: 0, + Grass: 0, + Ground: 0, + Ice: 0, + Normal: 1, + Poison: 1, + Psychic: 0, + Rock: 0, + Steel: 1, + Stellar: 0, + Water: 0, + }, + }, + ghost: { + inherit: true, + damageTaken: { + Bug: 3, + Dark: 1, + Dragon: 1, + Electric: 1, + Fairy: 3, + Fighting: 3, + Fire: 1, + Flying: 3, + Ghost: 3, + Grass: 1, + Ground: 3, + Ice: 1, + Normal: 3, + Poison: 3, + Psychic: 1, + Rock: 3, + Steel: 3, + Stellar: 0, + Water: 1, + }, + }, +}; diff --git a/data/mods/biomechmons/abilities.ts b/data/mods/biomechmons/abilities.ts index 62b6ffd416..832ffc2bae 100644 --- a/data/mods/biomechmons/abilities.ts +++ b/data/mods/biomechmons/abilities.ts @@ -185,17 +185,20 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa (pokemon.m.scrambled.abilities as { thing: string, inSlot: string }[]).findIndex(e => this.toID(e.thing) === 'trace' && e.inSlot === 'Move'), 1); this.add('-ability', pokemon, move.name, 'Trace'); + const ppUps = move.noPPBoosts ? 0 : 3; + const basePP = this.calculatePP(move, ppUps); const newMove = { move: move.name, id: move.id, - pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, - maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, + pp: basePP, + maxpp: basePP, target: move.target, disabled: false, used: false, }; pokemon.baseMoveSlots.push(newMove); pokemon.moveSlots.push(newMove); + pokemon.ppUps.push(ppUps); } } return; diff --git a/data/mods/biomechmons/moves.ts b/data/mods/biomechmons/moves.ts index 1ab2c93520..c1348b090b 100644 --- a/data/mods/biomechmons/moves.ts +++ b/data/mods/biomechmons/moves.ts @@ -298,17 +298,20 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { } else { source.m.scrambled.moves.push({ thing: targetAbility.id, inSlot: 'Ability' }); const bmmMove = Dex.moves.get(targetAbility.id); + const ppUps = move.noPPBoosts ? 0 : 3; + const basePP = this.calculatePP(move, ppUps); const newMove = { move: bmmMove.name, id: bmmMove.id, - pp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5, - maxpp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5, + pp: basePP, + maxpp: basePP, target: bmmMove.target, disabled: false, used: false, }; source.baseMoveSlots.push(newMove); source.moveSlots.push(newMove); + source.ppUps.push(ppUps); } } this.singleEvent('Start', sourceAbility, target.abilityState, target); @@ -321,17 +324,20 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { } else { target.m.scrambled.moves.push({ thing: sourceAbility.id, inSlot: 'Ability' }); const bmmMove = Dex.moves.get(sourceAbility.id); + const ppUps = move.noPPBoosts ? 0 : 3; + const basePP = this.calculatePP(move, ppUps); const newMove = { move: bmmMove.name, id: bmmMove.id, - pp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5, - maxpp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5, + pp: basePP, + maxpp: basePP, target: bmmMove.target, disabled: false, used: false, }; target.baseMoveSlots.push(newMove); target.moveSlots.push(newMove); + target.ppUps.push(ppUps); } } }, diff --git a/data/mods/biomechmons/scripts.ts b/data/mods/biomechmons/scripts.ts index 199d54b805..011f507547 100644 --- a/data/mods/biomechmons/scripts.ts +++ b/data/mods/biomechmons/scripts.ts @@ -167,11 +167,13 @@ export const Scripts: ModdedBattleScriptsData = { } else { this.m.scrambled.moves.push({ thing: ability.id, inSlot: 'Ability' }); const move = Dex.moves.get(ability.id); + const ppUps = move.noPPBoosts ? 0 : 3; + const basePP = this.battle.calculatePP(move, ppUps); const newMove = { move: move.name, id: move.id, - pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, - maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, + pp: basePP, + maxpp: basePP, target: move.target, disabled: false, used: false, @@ -179,6 +181,7 @@ export const Scripts: ModdedBattleScriptsData = { if (!isTransform) { this.baseMoveSlots.push(newMove); this.moveSlots.push(newMove); + this.ppUps.push(ppUps); } } } @@ -322,17 +325,20 @@ export const Scripts: ModdedBattleScriptsData = { } else { this.m.scrambled.moves.push({ thing: item.id, inSlot: 'Item' }); const move = Dex.moves.get(item.id); + const ppUps = move.noPPBoosts ? 0 : 3; + const basePP = this.battle.calculatePP(move, ppUps); const newMove = { move: move.name, id: move.id, - pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, - maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, + pp: basePP, + maxpp: basePP, target: move.target, disabled: false, used: false, }; this.baseMoveSlots.push(newMove); this.moveSlots.push(newMove); + this.ppUps.push(ppUps); } } return true; @@ -483,16 +489,17 @@ export const Scripts: ModdedBattleScriptsData = { this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType); this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower); this.timesAttacked = pokemon.timesAttacked; - for (const moveSlot of pokemon.moveSlots) { + for (const [i, moveSlot] of pokemon.moveSlots.entries()) { let moveName = moveSlot.move; if (moveSlot.id === 'hiddenpower') { moveName = 'Hidden Power ' + this.hpType; } + const move = this.battle.dex.moves.get(moveSlot.id); this.moveSlots.push({ move: moveName, id: moveSlot.id, - pp: moveSlot.maxpp === 1 ? 1 : 5, - maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp, + pp: Math.min(5, move.pp), + maxpp: this.battle.gen >= 5 ? Math.min(5, move.pp) : moveSlot.maxpp, target: moveSlot.target, disabled: false, used: false, diff --git a/data/mods/ccapm2025/abilities.ts b/data/mods/ccapm2025/abilities.ts new file mode 100644 index 0000000000..3dc6dba4af --- /dev/null +++ b/data/mods/ccapm2025/abilities.ts @@ -0,0 +1,1389 @@ +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + // Modified Abilities + healer: { + inherit: true, + onResidual(pokemon) { + for (const allyActive of pokemon.adjacentAllies()) { + if (allyActive.status && this.randomChance(3, 10)) { + this.add('-activate', pokemon, 'ability: Healer'); + (allyActive as any).cureStatus(false, pokemon); + } + } + }, + }, + hydration: { + inherit: true, + onResidual(pokemon) { + if (pokemon.status && ['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { + this.debug('hydration cure'); + this.add('-activate', pokemon, 'ability: Hydration'); + (pokemon as any).cureStatus?.(false, pokemon); + } + }, + }, + immunity: { + inherit: true, + onUpdate(pokemon) { + if (pokemon.status === 'psn' || pokemon.status === 'tox') { + this.add('-activate', pokemon, 'ability: Immunity'); + (pokemon as any).cureStatus(false, pokemon); + } + }, + }, + insomnia: { + inherit: true, + onUpdate(pokemon) { + if (pokemon.status === 'slp') { + this.add('-activate', pokemon, 'ability: Insomnia'); + (pokemon as any).cureStatus(false, pokemon); + } + }, + }, + limber: { + inherit: true, + onUpdate(pokemon) { + if (pokemon.status === 'par') { + this.add('-activate', pokemon, 'ability: Limber'); + (pokemon as any).cureStatus(false, pokemon); + } + }, + }, + magmaarmor: { + inherit: true, + onUpdate(pokemon) { + if (pokemon.status === 'frz') { + this.add('-activate', pokemon, 'ability: Magma Armor'); + (pokemon as any).cureStatus(false, pokemon); + } + }, + }, + naturalcure: { + inherit: true, + onSwitchOut(pokemon) { + if (!pokemon.status) return; + + // if pokemon.showCure is undefined, it was skipped because its ability + // is known + if (pokemon.showCure === undefined) pokemon.showCure = true; + + if (pokemon.showCure) this.add('-curestatus', pokemon, pokemon.status, '[from] ability: Natural Cure'); + (pokemon as any).cureStatus(pokemon.showCure, pokemon); + + // only reset .showCure if it's false + // (once you know a Pokemon has Natural Cure, its cures are always known) + if (!pokemon.showCure) pokemon.showCure = undefined; + }, + }, + pastelveil: { + inherit: true, + onStart(pokemon) { + for (const ally of pokemon.alliesAndSelf()) { + if (['psn', 'tox'].includes(ally.status)) { + this.add('-activate', pokemon, 'ability: Pastel Veil'); + (ally as any).cureStatus(false, pokemon); + } + } + }, + onUpdate(pokemon) { + if (['psn', 'tox'].includes(pokemon.status)) { + this.add('-activate', pokemon, 'ability: Pastel Veil'); + (pokemon as any).cureStatus(false, pokemon); + } + }, + }, + poisonheal: { + inherit: true, + onDamage(damage, target, source, effect) { + if (effect.id === 'psn' || effect.id === 'tox') { + const toHeal = Math.min(target.baseMaxhp / 8, target.baseMaxhp - target.hp); + this.heal(toHeal); + if (target.species.name === "Gliscor" && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (!this.effectState.phCounter) this.effectState.phCounter = 0; + this.effectState.phCounter += toHeal; + if (this.effectState.phCounter >= target.baseMaxhp) + target.formeChange('Gliscor-Sated', null, true); + } + return false; + } + }, + }, + shedskin: { + inherit: true, + onResidual(pokemon) { + if (pokemon.hp && pokemon.status && this.randomChance(33, 100)) { + this.debug('shed skin'); + this.add('-activate', pokemon, 'ability: Shed Skin'); + (pokemon as any).cureStatus(false, pokemon); + } + }, + }, + stench: { + inherit: true, + onModifyMove(move) { + if (move.category !== "Status") { + this.debug('Adding Stench flinch'); + if (!move.secondaries) move.secondaries = []; + for (const secondary of move.secondaries) { + if (secondary.volatileStatus === 'flinch') return; + } + if (!this.ruleTable.tagRules.includes("+pokemontag:cap")) { + move.secondaries.push({ + chance: 20, + volatileStatus: 'flinch', + onHit(target, source, activeMove) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.species.name === 'Trubbish') { + source.formeChange('Trubbish-Mega-Dragon', this.effect, true); + } + }, + }); + } + } + }, + }, + thermalexchange: { + inherit: true, + onUpdate(pokemon) { + if (pokemon.status === 'brn') { + this.add('-activate', pokemon, 'ability: Thermal Exchange'); + (pokemon as any).cureStatus(false, pokemon); + } + }, + }, + vitalspirit: { + inherit: true, + onUpdate(pokemon) { + if (pokemon.status === 'slp') { + this.add('-activate', pokemon, 'ability: Vital Spirit'); + (pokemon as any).cureStatus(false, pokemon); + } + }, + }, + waterbubble: { + inherit: true, + onUpdate(pokemon) { + if (pokemon.status === 'brn') { + this.add('-activate', pokemon, 'ability: Water Bubble'); + (pokemon as any).cureStatus(false, pokemon); + } + }, + }, + waterveil: { + inherit: true, + onUpdate(pokemon) { + if (pokemon.status === 'brn') { + this.add('-activate', pokemon, 'ability: Water Veil'); + (pokemon as any).cureStatus(false, pokemon); + } + }, + }, + wonderguard: { + inherit: true, + onTryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.id === 'struggle') return; + if (move.id === 'skydrop' && !source.volatiles['skydrop']) return; + this.debug('Wonder Guard immunity: ' + move.id); + if (target.runEffectiveness(move) <= 0 || !target.runImmunity(move)) { + if (move.smartTarget) { + move.smartTarget = false; + } else { + this.add('-immune', target, '[from] ability: Wonder Guard'); + if (!this.ruleTable.tagRules.includes("+pokemontag:cap") && target.baseSpecies.name === 'Shedinja') { + target.formeChange('Shedinja-Escaped', null, true); + this.add('-activate', target, 'ability: Wonder Guard'); + } + } + return null; + } + }, + }, + + // New Abilities + geminfusion: { + onModifyTypePriority: -1, + onModifyType(move, pokemon) { + const item = pokemon.getItem(); + if (move.type === 'Rock' && item?.isGem) { + move.type = item.name.split(' ')[0]; + } + }, + onUpdate(pokemon) { + if (!pokemon.getItem()?.isGem) return; + + const type = pokemon.getItem().name.split(' ')[0]; + // map Rock to the new type, go through Set to delete duplicate entries + const newTypes = [...new Set(pokemon.getTypes().map(t => t === 'Rock' ? type : t))]; + + if (pokemon.getTypes().join() === newTypes.join() || !pokemon.setType(newTypes)) return; + this.add('-start', pokemon, 'typechange', newTypes.join('/'), '[from] ability: Gem Infusion'); + }, + flags: {}, + name: "Gem Infusion", + rating: 4, + num: 1001, + shortDesc: "If holding a Gem, primary type becomes the type of the Gem.", + }, + embodyaspectpixiedust: { + onStart(pokemon) { + if (pokemon.baseSpecies.name === 'Ogerpon-Pixiedust-Tera' && pokemon.terastallized && + !this.effectState.embodied) { + this.effectState.embodied = true; + this.boost({ spd: 1 }, pokemon); + } + }, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 }, + name: "Embody Aspect (Pixiedust)", + rating: 3.5, + shortDesc: "Ogerpon-Pixiedust: On switch-in, this Pokemon's Special Defense is raised by 1 stage.", + }, + stancechange: { + onModifyMovePriority: 1, + onModifyMove(move, attacker, defender) { + if (attacker.species.baseSpecies !== 'Aegislash' || attacker.transformed) return; + if (move.category === 'Status' && move.id !== 'kingsshield') return; + const targetForme = (move.id === 'soulboundslash' ? 'Aegislash-Soulbound' : + (move.id === 'kingsshield' ? 'Aegislash' : 'Aegislash-Blade')); + if (attacker.species.name !== targetForme) attacker.formeChange(targetForme); + }, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 }, + name: "Stance Change", + rating: 4, + num: 176, + shortDesc: "Aegislash: change Forme to Soulbound before Soulbound Slash and Shield before King's Shield.", + }, + stackshift: { + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Fire') { + this.debug('Stack Shift boost'); + return this.chainModify(1.5); + } + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { + if (move.type === 'Fire') { + this.debug('Stack Shift boost'); + return this.chainModify(1.5); + } + }, + onModifyMovePriority: 1, + onModifyMove(move, attacker, defender) { + if (attacker.species.baseSpecies !== 'Stakataka' || attacker.transformed) return; + if (move.category === 'Status' && move.id !== 'stackshield') return; + const targetForme = (move.id === 'stackshield' ? 'Stakataka' : 'Stakataka-Missile'); + if (attacker.species.name !== targetForme) attacker.formeChange(targetForme); + // attacker.setAbility('interdimensionalmissile', attacker); + }, + // airborneness implemented in scripts.ts:Pokemon#isGrounded + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 }, + name: "Stack Shift", + rating: 4, + shortDesc: "Stakataka: Levitate + Fire moves 1.5x pow. Missile before attacks, Base before Stack Shield.", + }, + interdimensionalmissile: { + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Fire') { + this.debug('Interdimensional Missile boost'); + return this.chainModify(1.5); + } + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { + if (move.type === 'Fire') { + this.debug('Interdimensional Missile boost'); + return this.chainModify(1.5); + } + }, + onModifyMovePriority: 1, + onModifyMove(move, attacker, defender) { + if (attacker.species.baseSpecies !== 'Stakataka' || attacker.transformed) return; + if (move.category === 'Status' && move.id !== 'stackshield') return; + const targetForme = (move.id === 'stackshield' ? 'Stakataka' : 'Stakataka-Missile'); + if (attacker.species.name !== targetForme) attacker.formeChange(targetForme); + attacker.setAbility('stackchange', attacker); + }, + // airborneness implemented in scripts.ts:Pokemon#isGrounded + flags: { breakable: 1, failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 }, + name: "Interdimensional Missile", + rating: 3.5, + shortDesc: "Effects of Levitate + Stack Shift + User's Fire moves deal 1.5x damage.", + }, + wither: { + onTryHit(target, source, move) { + if (target !== source && move.type === 'Water') { + if (!this.heal(target.baseMaxhp / 4)) { + this.add('-immune', target, '[from] ability: Wither'); + } + return null; + } + }, + onResidualOrder: 6, + onResidual(pokemon) { + this.damage(pokemon.baseMaxhp / 16); + }, + flags: { breakable: 1 }, + name: "Wither", + rating: 1.5, + shortDesc: "User loses 1/16 of its max HP per turn. Heals 25% HP when hit by Water.", + }, + toughwings: { + onModifyPriority(priority, pokemon, target, move) { + if (move?.type === 'Flying') return priority + 1; + }, + onBasePowerPriority: 21, + onBasePower(basePower, attacker, defender, move) { + if (move.flags['contact']) { + return this.chainModify([5325, 4096]); + } + }, + flags: {}, + name: "Tough Wings", + rating: 5, + shortDesc: "Effects Tough Claws + Gale Wings (Gen 6).", + }, + victoryfinale: { + onAnyModifyAccuracyPriority: -1, + onAnyModifyAccuracy(accuracy, target, source) { + if (source.isAlly(this.effectState.target) && typeof accuracy === 'number') { + return this.chainModify([5325, 4096]); + } + }, + flags: {}, + name: "Victory Finale", + rating: 3.5, + shortDesc: "This Pokemon's and its allies' moves have their accuracy multiplied by 1.3.", + }, + supercritical: { + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Water') { + this.debug('Supercritical boost'); + return this.chainModify(1.5); + } + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { + if (move.type === 'Water') { + this.debug('Supercritical boost'); + return this.chainModify(1.5); + } + }, + onModifyMovePriority: -1, + onModifyMove(move) { + if (move.category !== "Status") { + this.debug('Adding Supercritical suppress'); + if (!move.secondaries) move.secondaries = []; + move.secondaries.push({ + chance: 100, + volatileStatus: 'gastroacid', + }); + } + }, + onTryHit(pokemon, target, move) { + if (move.type === 'Water') { + this.add('-immune', pokemon, '[from] ability: Supercritical'); + return null; + } + }, + flags: { breakable: 1 }, + name: "Supercritical", + rating: 3, + shortDesc: "User's Water moves have 1.5x power and suppress the target's ability; Water immunity.", + }, + bitterness: { + onResidualOrder: 28, + onResidualSubOrder: 2, + onResidual(pokemon) { + if (pokemon.baseSpecies.name !== 'Weavile-Frost') return; + if (pokemon.activeTurns) { + this.boost({ atk: 1 }); + } + }, + flags: {}, + name: "Bitterness", + rating: 5, + shortDesc: "Weavile-Frost: Attack is raised by 1 stage at the end of each full turn it has been on the field.", + }, + emergencycannon: { + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender, move) { + if (move.flags['bullet']) { + this.debug('Emergency Cannon boost'); + return this.chainModify(1.5); + } + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { + if (move.flags['bullet']) { + this.debug('Emergency Cannon boost'); + return this.chainModify(1.5); + } + }, + onModifyMove(move) { + if (move.flags['bullet']) { + move.category = 'Physical'; + move.accuracy = true; + } + }, + flags: {}, + name: "Emergency Cannon", + rating: 3.5, + shortDesc: "User's bullet moves are physical, can't miss, and have 1.5x power.", + }, + martialize: { + onModifyTypePriority: -1, + onModifyType(move, pokemon) { + const noModifyType = [ + 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball', + ]; + if (move.type === 'Normal' && (!noModifyType.includes(move.id) || this.activeMove?.isMax) && + !(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) { + move.type = 'Fighting'; + move.typeChangerBoosted = this.effect; + } + }, + onBasePowerPriority: 23, + onBasePower(basePower, pokemon, target, move) { + if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); + }, + flags: {}, + name: "Martialize", + rating: 4, + shortDesc: "This Pokemon's Normal-type moves become Fighting-type moves and have their power multiplied by 1.2.", + }, + intoxicate: { + onModifyTypePriority: -1, + onModifyType(move, pokemon) { + const noModifyType = [ + 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball', + ]; + if (move.type === 'Normal' && (!noModifyType.includes(move.id) || this.activeMove?.isMax) && + !(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) { + move.type = 'Poison'; + move.typeChangerBoosted = this.effect; + } + }, + onBasePowerPriority: 23, + onBasePower(basePower, pokemon, target, move) { + if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); + }, + flags: {}, + name: "Intoxicate", + rating: 4, + shortDesc: "This Pokemon's Normal-type moves become Poison-type moves and have their power multiplied by 1.2.", + }, + shroomndoom: { + onStart(pokemon) { + pokemon.addVolatile('torment'); + }, + onModifyDamage(damage, source, target, move) { + if (target.getMoveHitData(move).typeMod <= 0) { + this.debug('Shroom n Doom boost'); + return this.chainModify(1.5); + } + }, + flags: {}, + name: "Shroom n' Doom", + rating: 2, + shortDesc: "User is under the effects of Torment. Non-SE moves deal 1.5x damage.", + }, + focusedfire: { + onSourceModifyAccuracyPriority: -1, + onSourceModifyAccuracy(accuracy) { + this.debug('focusedfire - enhancing accuracy'); + return this.chainModify(10, 1); + }, + onModifyPriority(priority, pokemon, target, move) { + if (move) return priority - 1; + }, + onModifyCritRatio(critRatio, source, target) { + return 5; + }, + flags: {}, + name: "Focused Fire", + rating: 3, + shortDesc: "User's attacks have -1 priority but can't miss and always crit.", + }, + guidedmissiles: { + onStart(pokemon) { + pokemon.addVolatile('focusenergy'); + }, + onModifyDamage(damage, source, target, move) { + if (target.getMoveHitData(move).crit) { + this.debug('Sniper boost'); + return this.chainModify(1.5); + } + }, + flags: {}, + name: "Guided Missiles", + rating: 5, + shortDesc: "Effects of Sniper + Uses Focus Energy on switch-in.", + }, + rampage: { + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { + if (attacker.hp <= attacker.maxhp / 2) { + this.debug('Rampage boost'); + return this.chainModify([5325, 4096]); + } else if (attacker.hp <= attacker.maxhp / 3) { + this.debug('Rampage boost'); + return this.chainModify([6799, 4096]); + } + }, + onModifySpe(spe, pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2) { + this.debug('Rampage boost'); + return this.chainModify([5325, 4096]); + } else if (pokemon.hp <= pokemon.maxhp / 3) { + this.debug('Rampage boost'); + return this.chainModify([6799, 4096]); + } + }, + flags: {}, + name: "Rampage", + rating: 3, + shortDesc: "1.3x SpA & Spe when below 50% max HP, 1.66x SpA & Spe when below 33% max HP.", + }, + spectralize: { + onModifyTypePriority: -1, + onModifyType(move, pokemon) { + const noModifyType = [ + 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball', + ]; + if (move.type === 'Normal' && (!noModifyType.includes(move.id) || this.activeMove?.isMax) && + !(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) { + move.type = 'Ghost'; + move.typeChangerBoosted = this.effect; + } + }, + onBasePowerPriority: 23, + onBasePower(basePower, pokemon, target, move) { + if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]); + }, + flags: {}, + name: "Spectralize", + rating: 4, + shortDesc: "This Pokemon's Normal-type moves become Ghost-type moves and have their power multiplied by 1.2.", + }, + overcharged: { + onTryHit(target, source, move) { + if (target !== source && move.type === 'Electric') { + if (!this.heal(target.baseMaxhp / 4)) { + this.add('-immune', target, '[from] ability: Overcharged'); + } + return null; + } + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Electric') { + this.debug('Overcharged boost'); + return this.chainModify([5325, 4096]); + } + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { + if (move.type === 'Electric') { + this.debug('Overcharged boost'); + return this.chainModify([5325, 4096]); + } + }, + onDamagingHitOrder: 1, + onDamagingHit(damage, target, source, move) { + target.addVolatile('charge'); + }, + flags: { breakable: 1 }, + name: "Overcharged", + rating: 3.5, + shortDesc: "Effects of Volt Absorb + Electromorphosis + Transistor.", + }, + aurapartner: { + onPrepareHit(source, target, move) { + if (move.category === 'Status' || move.multihit || move.flags['noparentalbond'] || move.flags['charge'] || + move.flags['futuremove'] || move.spreadHit || move.isZ || move.isMax) return; + move.multihit = 2; + move.multihitType = 'parentalbond'; + }, + onSourceModifySecondaries(secondaries, target, source, move) { + if (move.multihitType === 'parentalbond' && move.id === 'secretpower' && move.hit < 2) { + // hack to prevent accidentally suppressing King's Rock/Razor Fang + return secondaries.filter(effect => effect.volatileStatus === 'flinch'); + } + }, + flags: {}, + name: "Aura Partner", + rating: 4.5, + shortDesc: "This Pokemon's damaging moves hit twice. The second hit has its damage halved and is Ghost-type.", + }, + backbeat: { + onResidualOrder: 9, + onResidual(pokemon) { + if (!pokemon.volatiles['backbeat']) { + this.add('-activate', pokemon, 'ability: Backbeat'); + pokemon.addVolatile('backbeat'); + } else { + this.add('-activate', pokemon, 'ability: Backbeat'); + pokemon.removeVolatile('backbeat'); + }; + }, + flags: {}, + name: "Backbeat", + rating: 3, + shortDesc: "This Pokemon's attacks deal 1.5x damage every other turn.", + }, + volcanicpalette: { + onModifySTAB(stab, source, target, move) { + if (move.forceSTAB || source.hasType(move.type)) { + if (stab === 2) { + return 2.25; + } + return 2; + } + }, + onSourceModifyDamage(damage, source, target, move) { + if (target.getMoveHitData(move).typeMod > 0) { + this.debug('Volcanic Palette neutralize'); + return this.chainModify(0.75); + } + }, + flags: { breakable: 1 }, + name: "Volcanic Palette", + rating: 4, + shortDesc: "Effects of Solid Rock + Adaptability.", + }, + wildpalette: { + onModifySTAB(stab, source, target, move) { + if (move.forceSTAB || source.hasType(move.type)) { + if (stab === 2) { + return 2.25; + } + return 2; + } + }, + onAllyTryBoost(boost, target, source, effect) { + if ((source && target === source) || !target.hasType('Grass')) return; + let showMsg = false; + let i: BoostID; + for (i in boost) { + if (boost[i]! < 0) { + delete boost[i]; + showMsg = true; + } + } + if (showMsg && !(effect as ActiveMove).secondaries) { + const effectHolder = this.effectState.target; + this.add('-block', target, 'ability: Wild Palette', `[of] ${effectHolder}`); + } + }, + onAllySetStatus(status, target, source, effect) { + if (target.hasType('Grass') && source && target !== source && effect && effect.id !== 'yawn') { + this.debug('interrupting setStatus with Flower Veil'); + if (effect.name === 'Synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) { + const effectHolder = this.effectState.target; + this.add('-block', target, 'ability: Wild Palette', `[of] ${effectHolder}`); + } + return null; + } + }, + onAllyTryAddVolatile(status, target) { + if (target.hasType('Grass') && status.id === 'yawn') { + this.debug('Flower Veil blocking yawn'); + const effectHolder = this.effectState.target; + this.add('-block', target, 'ability: Wild Palette', `[of] ${effectHolder}`); + return null; + } + }, + flags: { breakable: 1 }, + name: "Wild Palette", + rating: 4, + shortDesc: "Effects of Flower Veil + Adaptability.", + }, + luminiouspalette: { + onModifySTAB(stab, source, target, move) { + if (move.forceSTAB || source.hasType(move.type)) { + if (stab === 2) { + return 2.25; + } + return 2; + } + }, + onFoeTryMove(target, source, move) { + const targetAllExceptions = ['perishsong', 'flowershield', 'rototiller']; + if (move.target === 'foeSide' || (move.target === 'all' && !targetAllExceptions.includes(move.id))) { + return; + } + const dazzlingHolder = this.effectState.target; + if ((source.isAlly(dazzlingHolder) || move.target === 'all') && move.priority > 0.1) { + this.attrLastMove('[still]'); + this.add('cant', dazzlingHolder, 'ability: Luminious Palette', move, `[of] ${target}`); + return false; + } + }, + flags: { breakable: 1 }, + name: "Luminious Palette", + rating: 4, + shortDesc: "Effects of Dazzling + Adaptability.", + }, + storybookpalette: { + onModifySTAB(stab, source, target, move) { + if (move.forceSTAB || source.hasType(move.type)) { + if (stab === 2) { + return 2.25; + } + return 2; + } + }, + onDamage(damage, target, source, effect) { + if (effect.effectType !== 'Move') { + if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); + return false; + } + }, + flags: {}, + name: "Storybook Palette", + rating: 4, + shortDesc: "Effects of Magic Guard + Adaptability.", + }, + phasicpalette: { + onModifySTAB(stab, source, target, move) { + if (move.forceSTAB || source.hasType(move.type)) { + if (stab === 2) { + return 2.25; + } + return 2; + } + }, + onDamagingHit(damage, target, source, move) { + if (move.type === 'Fire') { + this.boost({ atk: 1 }); + } + }, + onUpdate(pokemon) { + if (pokemon.status === 'brn') { + this.add('-activate', pokemon, 'ability: Phasic Palette'); + pokemon.cureStatus(); + } + }, + onSetStatus(status, target, source, effect) { + if (status.id !== 'brn') return; + if ((effect as Move)?.status) { + this.add('-immune', target, '[from] ability: Phasic Palette'); + } + return false; + }, + flags: { breakable: 1 }, + name: "Phasic Palette", + rating: 4, + shortDesc: "Effects of Thermal Exchange + Adaptability.", + }, + ruffianpalette: { + onModifySTAB(stab, source, target, move) { + if (move.forceSTAB || source.hasType(move.type)) { + if (stab === 2) { + return 2.25; + } + return 2; + } + }, + onSourceAfterFaint(length, target, source, effect) { + if (effect && effect.effectType === 'Move') { + this.boost({ atk: length }, source); + } + }, + flags: {}, + name: "Ruffian Palette", + rating: 4, + shortDesc: "Effects of Moxie + Adaptability.", + }, + evileye: { + onStart(pokemon) { + this.add('-ability', pokemon, 'Evil Eye'); + }, + onDeductPP(target, source) { + if (target.isAlly(source)) return; + return 2; + }, + flags: {}, + name: "Evil Eye", + rating: 4.5, + shortDesc: "If this Pokemon is the target of a foe's move, that moves loses 2 additional PP.", + }, + aeoliandrift: { + onStart(source) { + this.add("-ability", source, 'Aeolian Drift'); + this.add('-message', "Emolga spawns a strong wind!"); + source.side.addSideCondition('tailwind'); + }, + flags: {}, + name: "Aeolian Drift", + rating: 5, + shortDesc: "On switch-in, this Pokemon summons Tailwind.", + }, + darkmagic: { + onDamagingHit(damage, target, source, move) { + if (source.volatiles['disable']) return; + if (!move.isMax && !move.flags['futuremove'] && move.id !== 'struggle') { + if (this.randomChance(3, 10)) { + source.addVolatile('disable', this.effectState.target); + } + } + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Ghost' || move.type === 'Dragon') { + this.debug('Dark Magic boost'); + return this.chainModify([5325, 4096]); + } + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { + if (move.type === 'Ghost' || move.type === 'Dragon') { + this.debug('Dark Magic boost'); + return this.chainModify([5325, 4096]); + } + }, + flags: {}, + name: "Dark Magic", + rating: 4, + shortDesc: "Effects of Cursed Body + User's Ghost and Dragon moves deal 1.3x damage.", + }, + burnout: { + onStart(pokemon) { + pokemon.addVolatile('burnout'); + }, + condition: { + duration: 3, + onStart(pokemon) { + this.add('-start', pokemon, 'Burnout'); + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender, move) { + this.debug('Burnout boost'); + return this.chainModify(1.5); + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { + this.debug('Burnout boost'); + return this.chainModify(1.5); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Burnout'); + this.add('-ability', pokemon, 'Burnout'); + pokemon.formeChange('Blaziken'); + pokemon.setAbility('toughclaws', pokemon); + this.add('-activate', pokemon, 'ability: Tough Claws'); + }, + }, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 }, + name: "Burnout", + rating: 3.5, + shortDesc: "Blaziken-Wildfire: 1.5x Atk & SpA. Reverts to base Blaziken after 2 turns.", + }, + moltencore: { + onSwitchInPriority: 2, + onSwitchIn(pokemon) { + if (pokemon.baseSpecies.baseSpecies !== 'Magcargo') return; + const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; + const activeHazards = sideConditions.filter(hazard => !pokemon.side.sideConditions[hazard]); + if (activeHazards.length > 0) { + const randomHazard = activeHazards[this.random(activeHazards.length)]; + this.add('-sideend', pokemon.side, this.dex.conditions.get(randomHazard).name, '[from] move: Rapid Spin', `[of] ${pokemon}`); + // This should probably be one layer of (Toxic) Spikes. Not implemented for now + } + if (pokemon.species.forme !== 'Fractured') { + this.add('-activate', pokemon, 'ability: Molten Core'); + pokemon.formeChange('Magcargo-Fractured', this.effect, false); + } + }, + name: "Molten Core", + rating: 3.5, + num: 307, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 }, + shortDesc: "Magcargo: On switch-in, absorbs 1 layer of hazards and transforms; Hazard immunity.", + }, + growingbitterness: { + onStart(pokemon) { + if (!this.effectState.counter) { + this.add('-start', pokemon, 'ability: Growing Bitterness'); + this.effectState.counter = 8; + } + }, + onResidualOrder: 28, + onResidualSubOrder: 2, + onResidual(pokemon) { + if (pokemon.activeTurns && this.effectState.counter) { + this.effectState.counter--; + if (!this.effectState.counter) { + this.add('-end', pokemon, 'Growing Bitterness'); + delete this.effectState.counter; + pokemon.formeChange('Weavile-Frost', null, true); + } + } + }, + flags: {}, + name: "Growing Bitterness", + rating: 0, + num: 1112, + shortDesc: "Weavile: Transforms into Weavile-Frost after being active for 8 turns.", + }, + heartofcold: { + onStart(pokemon) { + this.add('-message', `${pokemon.species.name}'s heart has grown cold!`); + }, + onModifyDefPriority: 6, + onModifyDef(pokemon) { + if (/* pokemon.hasType('Ice') && */ !this.field.isWeather(['hail', 'snowscape'])) { + return this.chainModify(1.5); + } + }, + flags: { breakable: 1 }, + name: "Heart of Cold", + rating: 0, + shortDesc: "This Pokemon's moves and stats act as if Snowscape is active.", + }, + headon: { + onDamage(damage, target, source, effect) { + if (effect.effectType !== 'Move') { + if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); + return false; + } + }, + onModifyMove(move) { + delete move.flags['contact']; + }, + onModifyAccuracyPriority: -1, + onModifyAccuracy(accuracy) { + if (this.effectState.headOn) return; + this.effectState.headOn = true; + this.add('-ability', this.effectState.target, 'Head-On'); + this.hint("Torterra-Old! dodges the first attack that targets it."); + this.debug('Head-On forcing miss'); + return 0; + }, + flags: {}, + name: "Head-On", + rating: 5, + shortDesc: "Effects of Magic Guard and Long Reach. The first move to target this Pokemon always misses.", + }, + // advent + snowface: { + onSwitchInPriority: -2, + onStart(pokemon) { + if (this.field.isWeather(['hail', 'snowscape']) && pokemon.species.id === 'eiscuesnowconenosnow') { + this.add('-activate', pokemon, 'ability: Snow Face'); + this.effectState.busted = false; + pokemon.formeChange('Eiscue-Snowcone', this.effect, true); + } + }, + onDamagePriority: 1, + onDamage(damage, target, source, effect) { + if (effect?.effectType === 'Move' && effect.category === 'Special' && target.species.id === 'eiscuesnowcone') { + this.add('-activate', target, 'ability: Snow Face'); + this.effectState.busted = true; + return 0; + } + }, + onCriticalHit(target, type, move) { + if (!target) return; + if (move.category !== 'Special' || target.species.id !== 'eiscuesnowcone') return; + if (target.volatiles['substitute'] && !(move.flags['bypasssub'] || move.infiltrates)) return; + if (!target.runImmunity(move)) return; + return false; + }, + onEffectiveness(typeMod, target, type, move) { + if (!target) return; + if (move.category !== 'Special' || target.species.id !== 'eiscuesnowcone') return; + const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); + if (hitSub) return; + if (!target.runImmunity(move)) return; + return 0; + }, + onUpdate(pokemon) { + if (pokemon.species.id === 'eiscuesnowcone' && this.effectState.busted) { + pokemon.formeChange('Eiscue-Snowcone-Nosnow', this.effect, true); + } + }, + onWeatherChange(pokemon, source, sourceEffect) { + // snow/hail resuming because Cloud Nine/Air Lock ended does not trigger Ice Face + if ((sourceEffect as Ability)?.suppressWeather) return; + if (!pokemon.hp) return; + if (this.field.isWeather(['hail', 'snowscape']) && pokemon.species.id === 'eiscuesnowconenosnow') { + this.add('-activate', pokemon, 'ability: Snow Face'); + this.effectState.busted = false; + pokemon.formeChange('Eiscue-Snowcone', this.effect, true); + } + }, + flags: { + failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, + breakable: 1, notransform: 1, + }, + name: "Snow Face", + rating: 3, + shortDesc: "Eiscue-Snowcone: The first special hit it takes deals 0 damage. Effect is restored in Snow.", + }, + gingerstream: { + onStart(source) { + this.field.setWeather('gingerstorm'); + }, + flags: {}, + name: "Ginger Stream", + rating: 4, + shortDesc: "On switch-in, this Pokemon summons Gingerstorm.", + }, + littlesoldier: { + onModifyDamage(damage, source, target, move) { + if (target.baseSpecies.bst > source.baseSpecies.bst) { + this.debug('Little Soldier boost'); + return this.chainModify(1.3); + } + }, + flags: {}, + name: "Little Soldier", + rating: 2, + shortDesc: "This Pokemon's attacks do 1.3x damage to foes with a higher BST.", + }, + chillingvoice: { + onModifyTypePriority: -1, + onModifyType(move, pokemon) { + if (move.flags['sound'] && !pokemon.volatiles['dynamax']) { // hardcode + move.type = 'Ice'; + } + }, + flags: {}, + name: "Chilling Voice", + rating: 1.5, + shortDesc: "This Pokemon's sound moves become Ice-type.", + }, + equalshare: { + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender, move) { + const screens = [ + 'lightscreen', 'reflect', 'auroraveil', + ]; + for (const screen of screens) { + if (defender.side.getSideCondition(screen)) { + this.debug('Equal Share boost'); + return this.chainModify(1.5); + } + } + const yourSide = attacker.side; + let allLayers = 0; + if (yourSide.getSideCondition('stealthrock')) allLayers++; + if (yourSide.getSideCondition('bristles')) allLayers++; + if (yourSide.getSideCondition('stickyweb')) allLayers++; + if (yourSide.sideConditions['spikes']) { + allLayers += yourSide.sideConditions['spikes'].layers; + } + if (yourSide.sideConditions['toxicspikes']) { + allLayers += yourSide.sideConditions['toxicspikes'].layers; + } + const theLayers = Math.min(allLayers, 5); + const powMod = [4096, 4506, 4915, 5325, 5734, 6144]; + return this.chainModify([powMod[theLayers], 4096]); + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { + const screens = [ + 'lightscreen', 'reflect', 'auroraveil', + ]; + for (const screen of screens) { + if (defender.side.getSideCondition(screen)) { + this.debug('Equal Share boost'); + return this.chainModify(1.5); + } + } + const yourSide = attacker.side; + let allLayers = 0; + if (yourSide.getSideCondition('stealthrock')) allLayers++; + if (yourSide.getSideCondition('bristles')) allLayers++; + if (yourSide.getSideCondition('stickyweb')) allLayers++; + if (yourSide.sideConditions['spikes']) { + allLayers += yourSide.sideConditions['spikes'].layers; + } + if (yourSide.sideConditions['toxicspikes']) { + allLayers += yourSide.sideConditions['toxicspikes'].layers; + } + const theLayers = Math.min(allLayers, 5); + const powMod = [4096, 4506, 4915, 5325, 5734, 6144]; + return this.chainModify([powMod[theLayers], 4096]); + }, + flags: {}, + name: "Equal Share", + rating: 2, + shortDesc: "10% boost to offensive stats for each layer of hazards on user's side. 50% boost if the foe has screens.", + }, + swindling: { + // placeholder + flags: {}, + name: "Swindling", + rating: 1.5, + shortDesc: "This Pokemon steals the items from Pokemon holding the same item.", + }, + sweetfreezing: { + onResidualOrder: 29, + onResidual(pokemon) { + this.heal(pokemon.baseMaxhp / 16); + }, + flags: {}, + name: "Sweet Freezing", + rating: 1, + shortDesc: "User heals 1/16th of its max HP each turn.", + }, + psychicsimmer: { + onStart(source) { + this.field.setTerrain('psychicterrain'); + }, + onSourceDamagingHit(damage, target, source, move) { + // Despite not being a secondary, Shield Dust / Covert Cloak block Poison Touch's effect + if (target.hasAbility('shielddust') || target.hasItem('covertcloak')) return; + if (move.type === 'Psychic' && this.field.isTerrain('psychicterrain') && source.isGrounded()) { + if (this.randomChance(2, 10)) { + target.trySetStatus('brn', source); + } + } + }, + flags: {}, + name: "Psychic Simmer", + rating: 4, + shortDesc: "Summons Psychic Terrain. Psychic moves in Psychic Terrain have a 20% burn chance.", + }, + fragiliteshield: { + onDamagingHit(damage, target, source, move) { + this.field.setTerrain('mistyterrain'); + }, + flags: {}, + name: "Fragilite\u0301 Shield", + rating: 2.5, + shortDesc: "When this Pokemon is hit by an attack, the effect of Misty Terrain begins.", + }, + bristle: { + onDamage(damage, target, source, effect) { + if ( + effect.effectType === "Move" && + !effect.multihit && + !(effect.hasSheerForce && source.hasAbility('sheerforce') && + effect.category === 'Physical') + ) { + this.effectState.checkedBristle = false; + } else { + this.effectState.checkedBristle = true; + } + }, + onTryEatItem(item) { + const healingItems = [ + 'aguavberry', 'enigmaberry', 'figyberry', 'iapapaberry', 'magoberry', 'sitrusberry', 'wikiberry', 'oranberry', 'berryjuice', + ]; + if (healingItems.includes(item.id)) { + return this.effectState.checkedBristle; + } + return true; + }, + onAfterMoveSecondary(target, source, move) { + this.effectState.checkedBristle = true; + if (!source || source === target || !target.hp || !move.totalDamage) return; + const lastAttackedBy = target.getLastAttackedBy(); + if (!lastAttackedBy) return; + const damage = move.multihit && !move.smartTarget ? move.totalDamage : lastAttackedBy.damage; + if (target.hp <= target.maxhp / 2 && target.hp + damage > target.maxhp / 2) { + this.add('-activate', target, 'ability: Bristle'); + target.side.addSideCondition('bristles', target); + } + }, + flags: {}, + name: "Bristle", + rating: 2, + shortDesc: "If this Pokemon is brought below 50% HP by a physical move, sets up Bristles.", + }, + angehalo: { + gen: 9, + shortDesc: "Foe have 1/16 (1/8 for Megas) of their max HP drained every turn.", + onResidualOrder: 5, + onResidualSubOrder: 4, + onResidual(pokemon) { + if (!pokemon.hp) return; + const megaFoes = []; + for (const target of pokemon.foes()) { + if (target.baseSpecies.isMega) megaFoes.push(target); + } + if (megaFoes.length) { + for (const target of megaFoes) { + this.damage(target.baseMaxhp / 8, target, pokemon); + this.heal(target.baseMaxhp / 8); + } + } else { + for (const target of pokemon.foes()) { + this.damage(target.baseMaxhp / 16, target, pokemon); + this.heal(target.baseMaxhp / 16); + } + } + }, + name: "Ange Halo", + }, + shatteredreflection: { + // placeholder, might have to be hardcoded into type changing effects? + flags: {}, + name: "Shattered Reflection", + rating: 1.5, + shortDesc: "When this Pokemon's type is changed, imprisons foe and becomes center of attention.", + }, + entrapment: { + onStart(pokemon) { + this.add('-ability', pokemon, 'Entrapment'); + for (const target of pokemon.adjacentFoes()) { + target.side.addSideCondition('spikes', target); + } + }, + flags: {}, + name: "Entrapment", + rating: 5, + shortDesc: "On switch-in, sets a layer of Spikes on the foe's side of the field.", + }, + giftstealer: { + onAfterMoveSecondarySelf(source, target, move) { + if (!move || source.switchFlag === true || !move.hitTargets || source.item || source.volatiles['gem'] || + move.id === 'fling' || move.category === 'Status') return; + const hitTargets = move.hitTargets; + this.speedSort(hitTargets); + for (const pokemon of hitTargets) { + if (pokemon !== source) { + const yourItem = pokemon.takeItem(source); + if (!yourItem) continue; + if (!source.setItem(yourItem)) { + pokemon.item = yourItem.id; // bypass setItem so we don't break choicelock or anything + continue; + } + this.add('-item', source, yourItem, '[from] ability: Gift Stealer', `[of] ${pokemon}`); + return; + } + } + }, + onResidualOrder: 5, + onResidualSubOrder: 4, + onResidual(pokemon) { + if (!pokemon.hp) return; + this.actions.useMove("Fling", pokemon); + }, + flags: {}, + name: "Gift Stealer", + rating: 3, + shortDesc: "Effects of Magician. This Pokemon uses Fling at the end of every turn.", + }, + heartcage: { + // placeholder + /* const heartMoves = [ + 'heartstamp', 'heartswap', 'takeheart', + ]; */ + onModifyDamage(damage, source, target, move) { + if (move.id === 'heartstamp') { + this.debug('Heart Cage boost'); + return this.chainModify(1.5); + } + }, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 }, + name: "Heart Cage", + rating: 1.5, + shortDesc: "Grincheart: Using 3 Heart moves changes for the Grincheart-Grown. Heart Stamp has 1.5x power.", + }, + cashinfusion: { + // placeholder, would have to add the in-game formula for this to pay day & make it rain + flags: {}, + name: "Cash Infusion", + rating: 1.5, + shortDesc: "This Pokémon receives a damage boost equal to 2% of the Pokémon Dollars scattered throughout a battle.", + }, + crystalize: { + onAfterMoveSecondarySelf(source, target, move) { + if (this.queue.willMove(target)) { + source.addVolatile('crystalize'); + } + }, + condition: { + noCopy: true, // doesn't get copied by Baton Pass + duration: 1, + onStart(target) { + this.add('-start', target, 'ability: Crystalize'); + this.effectState.damage = 0; + }, + onDamagingHitOrder: 1, + onDamagingHit(damage, target, source, move) { + this.effectState.damage = 1.5 * damage; + this.damage(this.effectState.damage, source, target); + }, + onEnd(target) { + this.add('-end', target, 'ability: Crystalize', '[silent]'); + }, + }, + flags: {}, + name: "Crystalize", + rating: 3, + shortDesc: "If this Pokémon uses a Rock-type move before the foe attacks, return 1.5x damage received to attackers for the rest of this turn.", + }, + bellchoir: { + onAfterMoveSecondarySelf(source, target, move) { + if (move.flags['sound']) { + this.field.setTerrain('mistyterrain'); + } + }, + flags: {}, + name: "Bell Choir", + rating: 3, + shortDesc: "Summons Misty Terrain after using a sound move.", + }, + socialretreat: { + // placeholder + flags: {}, + name: "Social Retreat", + rating: 3, + shortDesc: "Changes this Pokemon's secondary type to what best matches up against incoming moves.", + }, + tryingmybest: { + onSwitchIn(pokemon) { + if (pokemon.side.pokemonLeft === 1) { + if (pokemon.species.name === 'Luvdisc') { + pokemon.formeChange('Luvdisc-Heartbreak', this.effect, true); + } + } else { + const mon = pokemon as any; + if (mon.timesSwitchedIn) mon.timesSwitchedIn++; + else mon.timesSwitchedIn = 1; + } + }, + flags: {}, + name: "Trying My Best!", + rating: 4, + num: 1293, + }, + primalshackle: { + // placeholder, form change was implemented in rulesets.ts because we didn't + // know that it was supposed to be an ability lol + onDamage(damage, target, source, effect) { + if ( + effect.effectType === "Move" && + !effect.multihit && + !(effect.hasSheerForce && source.hasAbility('sheerforce')) + ) { + this.effectState.checkedPrimalShackle = false; + } else { + this.effectState.checkedPrimalShackle = true; + } + }, + onAfterMoveSecondary(target, source, move) { + this.effectState.checkedBerserk = true; + if (!source || source === target || !target.hp || !move.totalDamage) return; + const lastAttackedBy = target.getLastAttackedBy(); + if (!lastAttackedBy) return; + const damage = move.multihit && !move.smartTarget ? move.totalDamage : lastAttackedBy.damage; + if (target.hp <= target.maxhp / 1.5 && target.hp + damage > target.maxhp / 2) { + this.add('-activate', target, 'ability: Primal Shackle'); + target.formeChange('Rayquaza-Untethered', null, true); + this.add('-message', "Rayquaza shatters its tether and escapes!"); + target.setAbility('beastboost', target); + } + }, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 }, + name: "Primal Shackle", + rating: 0, + shortDesc: "Rayquaza: Changes to Untethered form below 67% of its max HP.", + }, +}; diff --git a/data/mods/ccapm2025/conditions.ts b/data/mods/ccapm2025/conditions.ts new file mode 100644 index 0000000000..6ea17f5239 --- /dev/null +++ b/data/mods/ccapm2025/conditions.ts @@ -0,0 +1,175 @@ +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { + snowscape: { + inherit: true, + onFieldEnd() { + this.add('-weather', 'none'); + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + for (const pokemon of this.getAllActive()) { + if (pokemon.species.id === 'wyrdeer') { + pokemon.formeChange('Wyrdeer-Snowblind', this.effect, true); + this.add('-activate', pokemon, 'ability: Heart of Cold'); + } + } + }, + }, + ber: { + name: 'ber', + effectType: 'Status', + onStart(target, source, sourceEffect) { + this.effectState.counter = 0; + if (sourceEffect && sourceEffect.effectType === 'Ability') { + this.add('-activate', target, 'ber', '[from] ability: ' + sourceEffect.name, `[of] ${source}`); + } else { + this.add('-activate', target, 'ber'); + } + if (target.species.name === 'Drifblim') { + target.formeChange('Drifblim-Inflamed', this.effect, false); + } + for (const opponent of target.side.foe.active) { + const active = opponent.side.foe.active.filter(mon => mon.status === 'ber').length > 0; + if (opponent.species.name === 'Mesprit' && active) { + opponent.formeChange('Mesprit-Rampaging', this.effect, false); + } + if (opponent.species.name === 'Mesprit-Rampaging' && !active) { + opponent.formeChange('Mesprit', this.effect, false); + } + } + }, + onDamage(damage, target, source, effect) { + if (!target) return damage; + const hp = target.maxhp / 16; + this.effectState.counter += hp; + return damage + hp; + }, + onFoeDamage(damage, target, source, effect) { + if (source?.getStatus().name === 'ber') { + const hp = target.maxhp / 16; + this.effectState.counter += hp; + return damage + hp; + } + }, + onEnd(pokemon) { + for (const opponent of pokemon.side.foe.active) { + const active = opponent.side.foe.active.filter(mon => mon.status === 'ber').length > 0; + if (opponent.species.name === 'Mesprit' && active) { + opponent.formeChange('Mesprit-Rampaging', this.effect, false); + } + if (opponent.species.name === 'Mesprit-Rampaging' && !active) { + opponent.formeChange('Mesprit', this.effect, false); + } + } + if (pokemon.species.name === 'Drifblim-Inflamed') { + pokemon.formeChange('Drifblim', this.effect, false); + } + }, + onBeforeFaint(pokemon) { + for (const opponent of pokemon.side.foe.active) { + const active = opponent.side.foe.active.filter(mon => mon.status === 'ber').length - 1 > 0; + if (opponent.species.name === 'Mesprit' && active) { + opponent.formeChange('Mesprit-Rampaging', this.effect, false); + } + if (opponent.species.name === 'Mesprit-Rampaging' && !active) { + opponent.formeChange('Mesprit', this.effect, false); + } + } + }, + onSwitchOut(pokemon) { + for (const opponent of pokemon.side.foe.active) { + const active = opponent.side.foe.active.filter(mon => mon.status === 'ber').length - 1 > 0; + if (opponent.species.name === 'Mesprit' && active) { + opponent.formeChange('Mesprit-Rampaging', this.effect, false); + } + if (opponent.species.name === 'Mesprit-Rampaging' && !active) { + opponent.formeChange('Mesprit', this.effect, false); + } + } + }, + onSwitchIn(pokemon) { + if (this.effectState.counter >= 10000 * pokemon.maxhp) pokemon.cureStatus(); + for (const opponent of pokemon.side.foe.active) { + const active = opponent.side.foe.active.filter(mon => mon.status === 'ber').length > 0; + if (opponent.species.name === 'Mesprit' && active) { + opponent.formeChange('Mesprit-Rampaging', this.effect, false); + } + if (opponent.species.name === 'Mesprit-Rampaging' && !active) { + opponent.formeChange('Mesprit', this.effect, false); + } + } + if (pokemon.species.name === 'Drifblim') { + pokemon.formeChange('Drifblim-Inflamed', this.effect, false); + } + }, + }, + restoring: { + name: 'Restoring', + duration: 1, + onStart(target, source, sourceEffect) { + this.add('-start', target, 'restoring'); + }, + onEnd(target) { + if (target.species.id === 'aurorus') { + target.formeChange('Aurorus-Glorious', this.effect, true); + target.setAbility('megalauncher', target); + this.add('-activate', target, 'ability: Mega Launcher'); + if (this.field.isWeather(['hail', 'snowscape'])) { + target.heal(target.baseMaxhp / 2); + } + } + this.add('-end', target, 'restoring'); + }, + }, + backbeat: { + onStart(pokemon) { + this.add('-start', pokemon, 'Backbeat'); + }, + onModifyDamage(damage, source, target, move) { + return this.chainModify(1.5); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Backbeat'); + }, + }, + // advent + gingerstorm: { + name: 'Gingerstorm', + effectType: 'Weather', + duration: 5, + // This should be applied directly to the stat before any of the other modifiers are chained + // So we give it increased priority. + onModifyDefPriority: 10, + onModifyDef(def, pokemon) { + if (pokemon.hasType('Fire') && this.field.isWeather('gingerstorm')) { + return this.modify(def, 1.5); + } + }, + onFieldStart(field, source, effect) { + if (effect?.effectType === 'Ability') { + if (this.gen <= 5) this.effectState.duration = 0; + this.add('-weather', 'Gingerstorm', '[from] ability: ' + effect.name, `[of] ${source}`); + } else { + this.add('-weather', 'Gingerstorm'); + } + this.add('-message', `${source} whipped up a gingerstorm!`); + }, + onFieldResidualOrder: 1, + onFieldResidual() { + this.add('-weather', 'Gingerstorm', '[upkeep]'); + this.add('-message', `The gingerstorm continues!`); + if (this.field.isWeather('gingerstorm')) this.eachEvent('Weather'); + }, + onWeather(target) { + if (target.hasType('Fire')) return; + if (target.status === 'brn') { + this.damage(target.baseMaxhp / 8); + this.add('-message', `${target.name} was buffeted by the gingerstorm!`); + } else { + this.damage(target.baseMaxhp / 16); + this.add('-message', `${target.name} was buffeted by the gingerstorm!`); + } + }, + onFieldEnd() { + this.add('-weather', 'none'); + this.add('-message', `The gingerstorm subsided...`); + }, + }, +}; diff --git a/data/mods/ccapm2025/formats-data.ts b/data/mods/ccapm2025/formats-data.ts new file mode 100644 index 0000000000..dbfd743d18 --- /dev/null +++ b/data/mods/ccapm2025/formats-data.ts @@ -0,0 +1,599 @@ +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { + syclar: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + syclant: { + isNonstandard: "Custom", + tier: "CAP", + }, + revenankh: { + isNonstandard: "Custom", + tier: "CAP", + }, + embirch: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + flarelm: { + isNonstandard: "Custom", + tier: "CAP NFE", + }, + pyroak: { + isNonstandard: "Custom", + tier: "CAP", + }, + breezi: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + fidgit: { + isNonstandard: "Custom", + tier: "CAP", + }, + rebble: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + tactite: { + isNonstandard: "Custom", + tier: "CAP NFE", + }, + stratagem: { + isNonstandard: "Custom", + tier: "CAP", + }, + privatyke: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + arghonaut: { + isNonstandard: "Custom", + tier: "CAP", + }, + nohface: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + kitsunoh: { + isNonstandard: "Custom", + tier: "CAP", + }, + monohm: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + duohm: { + isNonstandard: "Custom", + tier: "CAP NFE", + }, + cyclohm: { + isNonstandard: "Custom", + tier: "CAP", + }, + dorsoil: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + colossoil: { + isNonstandard: "Custom", + tier: "CAP", + }, + protowatt: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + krilowatt: { + isNonstandard: "Custom", + tier: "CAP", + }, + voodoll: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + voodoom: { + isNonstandard: "Custom", + tier: "CAP", + }, + scratchet: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + tomohawk: { + isNonstandard: "Custom", + tier: "CAP", + }, + necturine: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + necturna: { + isNonstandard: "Custom", + tier: "CAP", + }, + mollux: { + isNonstandard: "Custom", + tier: "CAP", + }, + cupra: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + argalis: { + isNonstandard: "Custom", + tier: "CAP NFE", + }, + aurumoth: { + isNonstandard: "Custom", + tier: "CAP", + }, + brattler: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + malaconda: { + isNonstandard: "Custom", + tier: "CAP", + }, + cawdet: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + cawmodore: { + isNonstandard: "Custom", + tier: "CAP", + }, + volkritter: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + volkraken: { + isNonstandard: "Custom", + tier: "CAP", + }, + snugglow: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + plasmanta: { + isNonstandard: "Custom", + tier: "CAP", + }, + floatoy: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + caimanoe: { + isNonstandard: "Custom", + tier: "CAP NFE", + }, + naviathan: { + isNonstandard: "Custom", + tier: "CAP", + }, + crucibelle: { + isNonstandard: "Custom", + tier: "CAP", + }, + crucibellemega: { + isNonstandard: "Custom", + tier: "CAP", + }, + pluffle: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + kerfluffle: { + isNonstandard: "Custom", + tier: "CAP", + }, + pajantom: { + isNonstandard: "Custom", + tier: "CAP", + }, + mumbao: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + jumbao: { + isNonstandard: "Custom", + tier: "CAP", + }, + fawnifer: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + electrelk: { + isNonstandard: "Custom", + tier: "CAP NFE", + }, + caribolt: { + isNonstandard: "Custom", + tier: "CAP", + }, + smogecko: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + smoguana: { + isNonstandard: "Custom", + tier: "CAP NFE", + }, + smokomodo: { + isNonstandard: "Custom", + tier: "CAP", + }, + swirlpool: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + coribalis: { + isNonstandard: "Custom", + tier: "CAP NFE", + }, + snaelstrom: { + isNonstandard: "Custom", + tier: "CAP", + }, + justyke: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + equilibra: { + isNonstandard: "Custom", + tier: "CAP", + }, + solotl: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + astrolotl: { + isNonstandard: "Custom", + tier: "CAP", + }, + miasmite: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + miasmaw: { + isNonstandard: "Custom", + tier: "CAP", + }, + chromera: { + isNonstandard: "Custom", + tier: "CAP", + }, + venomicon: { + isNonstandard: "Custom", + tier: "CAP", + }, + venomiconepilogue: { + isNonstandard: "Custom", + tier: "CAP", + }, + saharascal: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + saharaja: { + isNonstandard: "Custom", + tier: "CAP", + }, + ababo: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + scattervein: { + isNonstandard: "Custom", + tier: "CAP NFE", + }, + hemogoblin: { + isNonstandard: "Custom", + tier: "CAP", + }, + cresceidon: { + isNonstandard: "Custom", + tier: "CAP", + }, + chuggon: { + isNonstandard: "Custom", + tier: "CAP LC", + }, + draggalong: { + isNonstandard: "Custom", + tier: "CAP NFE", + }, + chuggalong: { + isNonstandard: "Custom", + tier: "CAP", + }, + shox: { + isNonstandard: "Custom", + tier: "CAP", + }, + ramnarok: { + isNonstandard: "Custom", + tier: "CAP", + }, + ramnarokradiant: { + isNonstandard: "Custom", + tier: "Illegal", + }, + + // mostly for advent mons + ogerponpixiedust: { + tier: "OU", + doublesTier: "DOU", + }, + shakite: { + tier: "OU", + doublesTier: "DOU", + }, + strobite: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + xurkitreesinnoh: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + sandta: { + isNonstandard: "CAP", + tier: "CAP", + + doublesTier: "CAP", + }, + eiscuesnowcone: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + cardemelli: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + gingertar: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + gingertarmega: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + nuzcracker: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + smorgasbag: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + sableyefestive: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + mariahcarey: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + draydol: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + gamesi: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + vipux: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + popsicelf: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + bellbeque: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + chorislam: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + gholdengofestive: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + indeedeecook: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + dulceirene: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + dulceirenemega: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + wreith: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + eternalflowerwreith: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + clamperlalola: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + goodybyss: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + naughtail: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + gospiel: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + rusalvia: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + seraphexe: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + mirrelette: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + klefkimccallister: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + sacchamorte: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + treench: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + grincheartcaged: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + grincheartgrown: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + lelitoccia: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + deckherd: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + caneine: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + picktreebel: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + picktreebelmega: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + twinklingshade: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + irontwilight: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + faerwork: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + antaron: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + snowglob: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + dinjingle: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + guywithsweater: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + gristletoe: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + aegibashpolar: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + gingermason: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + swadloonfestive: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + leavannyfestive: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + mausholddysfunctional: { + isNonstandard: "CAP", + tier: "CAP", + doublesTier: "CAP", + }, + +}; diff --git a/data/mods/ccapm2025/items.ts b/data/mods/ccapm2025/items.ts new file mode 100644 index 0000000000..dd0d1ec699 --- /dev/null +++ b/data/mods/ccapm2025/items.ts @@ -0,0 +1,631 @@ +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { + // Changed Items + berserkgene: { + name: "Berserk Gene", + spritenum: 388, + onStart(pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (pokemon.useItem()) { + pokemon.trySetStatus('ber'); + } + }, + boosts: {}, + num: 0, + gen: 2, + isNonstandard: null, + shortDesc: "Makes the holder go berserk on switch-in. Single use.", + }, + // Custom Items + darminitanite: { + name: "Darminitanite", + spritenum: 576, + megaStone: { "Darmanitan": "Darmanitan-Mega" }, + itemUser: ["Darmanitan"], + onTakeItem(item, source) { + return !item.megaStone?.[source.baseSpecies.baseSpecies]; + }, + gen: 9, + shortDesc: "If held by a Darmanitan, this item allows it to Mega Evolve in battle.", + num: -1, + }, + emolgite: { + name: "Emolgite", + spritenum: 576, + megaStone: { "Emolga": "Emolga-Mega" }, + itemUser: ["Emolga"], + onTakeItem(item, source) { + return !item.megaStone?.[source.baseSpecies.baseSpecies]; + }, + gen: 9, + shortDesc: "If held by an Emolga, this item allows it to Mega Evolve in battle.", + num: -2, + }, + flygonite: { + name: "Flygonite", + spritenum: 576, + megaStone: { "Flygon": "Flygon-Mega" }, + itemUser: ["Flygon"], + onTakeItem(item, source) { + return !item.megaStone?.[source.baseSpecies.baseSpecies]; + }, + gen: 9, + shortDesc: "If held by a Flygon, this item allows it to Mega Evolve in battle.", + num: -3, + }, + mysterioustusk: { + name: "Mysterious Tusk", + spritenum: 382, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source?.baseSpecies.name === 'Mamoswine') { + return false; + } + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (pokemon.species.name === 'Mamoswine' && move.totalDamage === target.maxhp) { + pokemon.formeChange('Mamoswine-Overflow', this.effect, true); + } + }, + gen: 9, + }, + pixiedustmask: { + name: "Pixiedust Mask", + spritenum: 759, + fling: { + basePower: 60, + }, + onBasePowerPriority: 15, + onBasePower(basePower, user, target, move) { + if (user.baseSpecies.name.startsWith('Ogerpon-Pixiedust')) { + return this.chainModify([4915, 4096]); + } + }, + onTakeItem(item, source) { + if (source.baseSpecies.baseSpecies === 'Ogerpon') return false; + return true; + }, + forcedForme: "Ogerpon-Pixiedust", + itemUser: ["Ogerpon-Pixiedust"], + shortDesc: "Ogerpon-Pixiedust: 1.2x power attacks; Terastallize to gain Embody Aspect.", + num: -4, + gen: 9, + }, + ultrasimiseariumz: { + name: "Ultrasimisearium Z", + spritenum: 687, + onTakeItem: false, + zMove: "Yin-Yang Blast", + zMoveFrom: "Fire Blast", + itemUser: ["Simisear-Ultra"], + shortDesc: "Simisear: Ultra Burst, then Z-Move w/ Fire Blast.", + num: -4, + gen: 9, + }, + drearymushroom: { + name: "Dreary Mushroom", + spritenum: 609, + fling: { + basePower: 30, + }, + onDamagePriority: 1, + onSourceModifyDamage(damage, source, target, move) { + if (move && target.getMoveHitData(move).typeMod > 0 && !target.transformed) { + target.formeChange('Parasect-Wicked', this.effect, true); + this.damage(target.baseMaxhp / 8); + target.trySetStatus('ber'); + target.useItem(); + return 0; + } + }, + shortDesc: "Parasect: Blocks 1 SE move, loses 1/8 HP instead, changes form, and becomes Berserk. Single use.", + num: -5, + gen: 9, + }, + restorationcapsule: { + name: "Restoration Capsule", + spritenum: 6, + fling: { + basePower: 10, + }, + onStart(target) { + this.add('-item', target, 'Restoration Capsule'); + target.addVolatile('restoring'); + }, + // hazard immunity implemented in moves.ts + shortDesc: "Aurorus: Hazard immunity, changes its form after 1 turn.", + num: -6, + gen: 9, + }, + venomstake: { + name: "Venom Stake", + spritenum: 515, + fling: { + basePower: 40, + status: 'tox', + }, + onResidualOrder: 28, + onResidualSubOrder: 3, + onResidual(pokemon) { + pokemon.trySetStatus('tox', pokemon); + this.damage(pokemon.baseMaxhp / 8); + }, + onHit(target, source, move) { + if (source && source !== target && !source.item && move && this.checkMoveMakesContact(move, source, target)) { + const stake = target.takeItem(); + if (!stake) return; // Gen 4 Multitype + source.setItem(stake); + // no message for Sticky Barb changing hands + } + }, + num: -7, + shortDesc: "Effects of Toxic Orb and Sticky Barb.", + }, + buggem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Bug' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Bug' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + darkgem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Dark' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Dark' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + dragongem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Dragon' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Dragon' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + electricgem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Electric' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Electric' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + fairygem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Fairy' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Fairy' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + fightinggem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Fighting' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Fighting' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + firegem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Fire' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Fire' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + flyinggem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Flying' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Flying' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + ghostgem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Ghost' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Ghost' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + grassgem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Grass' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Grass' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + groundgem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Ground' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Ground' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + icegem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Ice' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Ice' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + normalgem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Normal' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Normal' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + poisongem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Poison' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Poison' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + rockgem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Rock' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Rock' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + steelgem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Steel' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Steel' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + watergem: { + inherit: true, + isNonstandard: null, + onTakeItem(item, pokemon, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.name === "Diancie" || source?.ability === "geminfusion" || pokemon.ability === "geminfusion") { + return false; + } + }, + onUseItem(item, pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if ((pokemon.name === "Diancie" || pokemon?.ability === "geminfusion") && item?.isGem) { + return false; + } + }, + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (move.type === 'Water' && source.ability === "geminfusion") { + source.addVolatile('gem'); + } else if (move.type === 'Water' && source.useItem()) { + source.addVolatile('gem'); + } + }, + }, + // advent + gingerite: { + name: "Gingerite", + spritenum: 576, + megaStone: { "Gingertar": "Gingertar-Mega" }, + itemUser: ["Gingertar"], + onTakeItem(item, source) { + return !item.megaStone?.[source.baseSpecies.baseSpecies]; + }, + gen: 9, + shortDesc: "If held by a Gingertar, this item allows it to Mega Evolve in battle.", + num: -1000, + }, + dulceirenite: { + name: "Dulceirenite", + spritenum: 576, + megaStone: { "Dulceirene": "Dulceirene-Mega" }, + itemUser: ["Dulceirene"], + onTakeItem(item, source) { + return !item.megaStone?.[source.baseSpecies.baseSpecies]; + }, + gen: 9, + shortDesc: "If held by a Dulceirene, this item allows it to Mega Evolve in battle.", + num: -1001, + }, + picktreelite: { + name: "Picktreelite", + spritenum: 576, + megaStone: { "Picktreebel": "Picktreebel-Mega" }, + itemUser: ["Picktreebel"], + onTakeItem(item, source) { + return !item.megaStone?.[source.baseSpecies.baseSpecies]; + }, + gen: 9, + shortDesc: "If held by a Picktreebel, this item allows it to Mega Evolve in battle.", + num: -1002, + }, + sablenite: { + inherit: true, + megaStone: { "Sableye-Festive": "Sableye-Festive-Mega" }, + itemUser: ["Sableye-Festive"], + }, +}; diff --git a/data/mods/ccapm2025/learnsets.ts b/data/mods/ccapm2025/learnsets.ts new file mode 100644 index 0000000000..9af7710e19 --- /dev/null +++ b/data/mods/ccapm2025/learnsets.ts @@ -0,0 +1,3041 @@ +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { + shakite: { + learnset: { + agility: ["9M"], + bide: ["7V"], + charge: ["9M", "9L1", "7L1", "6L1", "5L1", "4L1", "3L1"], + chargebeam: ["9M", "9L16", "7M", "7L16", "6M", "6L16", "5M", "5L22", "4M", "4L26"], + confide: ["7M", "6M"], + curse: ["9M", "7V"], + discharge: ["9L41", "7L41", "6L41"], + doubleedge: ["9M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + eerieimpulse: ["9M", "9L1", "7L1", "6L6"], + electricterrain: ["9M"], + electroball: ["9M", "9L22", "7L22", "6L22", "5L29"], + electroweb: ["9M"], + endure: ["9M", "7V", "4M", "3T"], + explosion: ["9L47", "8V", "7M", "7L47", "7V", "6M", "6L47", "5M", "5L57", "4M", "4L51", "3T", "3L54"], + facade: ["9M", "8V", "7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foulplay: ["9M", "8V", "7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigaimpact: ["9M", "7M", "6M", "5M", "4M"], + gyroball: ["9M", "9L54", "7M", "7L54", "6M", "6L51", "5M", "5L51", "4M", "4L46"], + headbutt: ["8V", "7V", "4T"], + helpinghand: ["9M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["9M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], + lightscreen: ["9M", "9L29", "8V", "7M", "7L29", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L22", "3M", "3L41"], + magiccoat: ["7T", "6T", "5T", "4T"], + magneticflux: ["9L1", "7L1", "6L1"], + magnetrise: ["9L36", "7T", "7L36", "6T", "6L36", "5T", "5L46", "4T", "4L40"], + metalsound: ["9M"], + mimic: ["7V", "3T"], + mirrorcoat: ["9L58", "8V", "7L58", "7V", "6L58", "5L62", "4L57", "3L59"], + naturalgift: ["4M"], + protect: ["9M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["9M", "7M", "7V", "6M", "5M", "4M", "3M"], + reflect: ["8V", "7V"], + rest: ["9M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["9L11", "7L11", "7V", "6L11", "5L15", "4T", "4L15", "3T", "3L34"], + round: ["7M", "6M", "5M"], + scaryface: ["9M"], + screech: ["9L13", "8V", "7L13", "7V", "6L13", "5L19", "4L19", "3L1"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["9L26", "8V", "7L26", "7V", "6L26", "5L35", "4L29", "3T", "3L27"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skullbash: ["7V"], + sleeptalk: ["9M", "7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + sonicboom: ["8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + spark: ["9L9", "7L9", "6L1", "5L1", "4L1", "3L21"], + substitute: ["9M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + supercellslam: ["9M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["9M", "9L20", "8V", "7L20", "7V", "6L20", "5L40", "4T", "4L35", "3T", "3L48"], + tackle: ["9L1", "8V", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["9M", "7V"], + taunt: ["9M", "8V", "7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T"], + teleport: ["8V", "7V"], + terablast: ["9M"], + thief: ["9M", "7M", "6M", "5M", "4M", "3M"], + thunder: ["9M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["9M", "8V", "7M", "7V", "6M", "5M", "4M", "3M"], + thundershock: ["9L1", "8V"], + thunderwave: ["9M", "8V", "7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["8V", "7M", "7V", "6M", "5M", "4M", "3M"], + voltswitch: ["9M", "7M", "6M", "5M"], + wildcharge: ["9M", "7M", "6M", "5M"], + zapcannon: ["7V"], + }, + encounters: [ + {generation: 1, level: 3}, + {generation: 2, level: 23}, + {generation: 3, level: 3, nature: "Hasty", ivs: {hp: 19, atk: 16, def: 18, spa: 25, spd: 25, spe: 19}, abilities: ["static"], pokeball: "pokeball"}, + {generation: 4, level: 23}, + ], + }, + ogerponpixiedust: { + eventOnly: true, + }, + // advent mons + strobite: { + learnset: { + bite: ["9L1"], + bodyslam: ["9L1"], + camouflage: ["9L1"], + charge: ["9L1"], + confide: ["9L1"], + crunch: ["9L1"], + darkpulse: ["9L1"], + discharge: ["9L1"], + doubleedge: ["9L1"], + electricterrain: ["9L1"], + electroball: ["9L1"], + endure: ["9L1"], + facade: ["9L1"], + falseswipe: ["9L1"], + firefang: ["9L1"], + flamethrower: ["9L1"], + fling: ["9L1"], + gigaimpact: ["9L1"], + helpinghand: ["9L1"], + hyperbeam: ["9L1"], + ironhead: ["9L1"], + leer: ["9L1"], + mudslap: ["9L1"], + protect: ["9L1"], + psychicfangs: ["9L1"], + quickguard: ["9L1"], + rapidspin: ["9L1"], + rest: ["9L1"], + risingvoltage: ["9L1"], + scaryface: ["9L1"], + shockwave: ["9L1"], + sleeptalk: ["9L1"], + sludgebomb: ["9L1"], + snore: ["9L1"], + spark: ["9L1"], + spikes: ["9L1"], + substitute: ["9L1"], + supercellslam: ["9L1"], + swift: ["9L1"], + takedown: ["9L1"], + taunt: ["9L1"], + temperflare: ["9L1"], + terablast: ["9L1"], + thunder: ["9L1"], + thunderfang: ["9L1"], + thunderwave: ["9L1"], + thunderbolt: ["9L1"], + thundershock: ["9L1"], + toxic: ["9L1"], + voltswitch: ["9L1"], + workup: ["9L1"], + zingzap: ["9L1"], + volttackle: ["9L1"], + }, + }, + xurkitreesinnoh: { + learnset: { + bestow: ["9L1"], + branchpoke: ["9L1"], + charm: ["9L1"], + decorate: ["9L1"], + fairywind: ["9L1"], + glitzyglow: ["9L1"], + grassknot: ["9L1"], + leafstorm: ["9L1"], + moonlight: ["9L1"], + powdersnow: ["9L1"], + snowscape: ["9L1"], + trailblaze: ["9L1"], + triattack: ["9L1"], + wrap: ["9L1"], + }, + }, + sandta: { + learnset: { + acidarmor: ["9L1"], + ancientpower: ["9L1"], + aquaring: ["9L1"], + bestow: ["9L1"], + bodypress: ["9L1"], + bodyslam: ["9L1"], + brine: ["9L1"], + bulldoze: ["9L1"], + charm: ["9L1"], + chillingwater: ["9L1"], + clearsmog: ["9L1"], + dig: ["9L1"], + earthpower: ["9L1"], + earthquake: ["9L1"], + encore: ["9L1"], + harden: ["9L1"], + icebeam: ["9L1"], + icepunch: ["9L1"], + icywind: ["9L1"], + liquidation: ["9L1"], + milkdrink: ["9L1"], + mist: ["9L1"], + mudbomb: ["9L1"], + mudshot: ["9L1"], + mudslap: ["9L1"], + playnice: ["9L1"], + present: ["9L1"], + protect: ["9L1"], + rest: ["9L1"], + rocktomb: ["9L1"], + sandattack: ["9L1"], + sandtomb: ["9L1"], + sandstorm: ["9L1"], + scald: ["9L1"], + scorchingsands: ["9L1"], + shoreup: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + soak: ["9L1"], + substitute: ["9L1"], + surf: ["9L1"], + terablast: ["9L1"], + tickle: ["9L1"], + tidalgift: ["9L1"], + waterpulse: ["9L1"], + wavecrash: ["9L1"], + }, + }, + eiscuesnowcone: { + learnset: { + airslash: ["9L1"], + aquajet: ["9L1"], + bravebird: ["9L1"], + bubble: ["9L1"], + bubblebeam: ["9L1"], + calmmind: ["9L1"], + esperwing: ["9L1"], + freezingglare: ["9L1"], + gust: ["9L1"], + iciclestorm: ["9L1"], + kinesis: ["9L1"], + lightscreen: ["9L1"], + mirrorcoat: ["9L1"], + psychic: ["9L1"], + psychicterrain: ["9L1"], + psyshock: ["9L1"], + tripleaxel: ["9L1"], + wingattack: ["9L1"], + }, + }, + cardemelli: { + learnset: { + alluringvoice: ["9L1"], + ancientpower: ["9L1"], + aromatherapy: ["9L1"], + aromaticmist: ["9L1"], + attract: ["9L1"], + bodypress: ["9L1"], + bulldoze: ["9L1"], + calmmind: ["9L1"], + captivate: ["9L1"], + charm: ["9L1"], + confide: ["9L1"], + craftyshield: ["9L1"], + dazzlinggleam: ["9L1"], + decorate: ["9L1"], + defensecurl: ["9L1"], + dig: ["9L1"], + disarmingvoice: ["9L1"], + entrainment: ["9L1"], + fairywind: ["9L1"], + followme: ["9L1"], + gigadrain: ["9L1"], + harden: ["9L1"], + haze: ["9L1"], + healpulse: ["9L1"], + healingwish: ["9L1"], + hypervoice: ["9L1"], + lightscreen: ["9L1"], + mistyterrain: ["9L1"], + mudbomb: ["9L1"], + mudshot: ["9L1"], + mudslap: ["9L1"], + mudsport: ["9L1"], + muddywater: ["9L1"], + mysticalfire: ["9L1"], + playnice: ["9L1"], + playrough: ["9L1"], + pollenpuff: ["9L1"], + pound: ["9L1"], + powergem: ["9L1"], + purify: ["9L1"], + raindance: ["9L1"], + recover: ["9L1"], + reflect: ["9L1"], + safeguard: ["9L1"], + sandattack: ["9L1"], + sandtomb: ["9L1"], + sandstorm: ["9L1"], + scorchingsands: ["9L1"], + soak: ["9L1"], + spikes: ["9L1"], + strangesteam: ["9L1"], + surf: ["9L1"], + sweetkiss: ["9L1"], + sweetscent: ["9L1"], + syrupbomb: ["9L1"], + watergun: ["9L1"], + waterpulse: ["9L1"], + weatherball: ["9L1"], + wideguard: ["9L1"], + wish: ["9L1"], + withdraw: ["9L1"], + yawn: ["9L1"], + }, + }, + gingertar: { + learnset: { + aerialace: ["9L1"], + ancientpower: ["9L1"], + aquatail: ["9L1"], + assurance: ["9L1"], + attract: ["9L1"], + avalanche: ["9L1"], + bite: ["9L1"], + blizzard: ["9L1"], + block: ["9L1"], + bodypress: ["9L1"], + bodyslam: ["9L1"], + breakingswipe: ["9L1"], + brickbreak: ["9L1"], + brutalswing: ["9L1"], + bulldoze: ["9L1"], + captivate: ["9L1"], + chipaway: ["9L1"], + confide: ["9L1"], + counter: ["9L1"], + crunch: ["9L1"], + curse: ["9L1"], + cut: ["9L1"], + darkpulse: ["9L1"], + detect: ["9L1"], + dig: ["9L1"], + doubleteam: ["9L1"], + doubleedge: ["9L1"], + dragonbreath: ["9L1"], + dragonclaw: ["9L1"], + dragondance: ["9L1"], + dragonpulse: ["9L1"], + dragontail: ["9L1"], + dynamicpunch: ["9L1"], + earthpower: ["9L1"], + earthquake: ["9L1"], + endure: ["9L1"], + facade: ["9L1"], + fireblast: ["9L1"], + firefang: ["9L1"], + firepunch: ["9L1"], + flamecharge: ["9L1"], + flamethrower: ["9L1"], + flareblitz: ["9L1"], + fling: ["9L1"], + focusblast: ["9L1"], + focusenergy: ["9L1"], + focuspunch: ["9L1"], + foulplay: ["9L1"], + frustration: ["9L1"], + furycutter: ["9L1"], + gigaimpact: ["9L1"], + gingerstorm: ["9L1"], + hardpress: ["9L1"], + headbutt: ["9L1"], + heatwave: ["9L1"], + heavyslam: ["9L1"], + helpinghand: ["9L1"], + hiddenpower: ["9L1"], + highhorsepower: ["9L1"], + honeclaws: ["9L1"], + hydropump: ["9L1"], + hyperbeam: ["9L1"], + icebeam: ["9L1"], + icefang: ["9L1"], + icepunch: ["9L1"], + icywind: ["9L1"], + incinerate: ["9L1"], + inferno: ["9L1"], + irondefense: ["9L1"], + ironhead: ["9L1"], + irontail: ["9L1"], + knockoff: ["9L1"], + lashout: ["9L1"], + leer: ["9L1"], + lowkick: ["9L1"], + megakick: ["9L1"], + megapunch: ["9L1"], + mimic: ["9L1"], + mudshot: ["9L1"], + mudslap: ["9L1"], + muddywater: ["9L1"], + naturalgift: ["9L1"], + nightmare: ["9L1"], + outrage: ["9L1"], + payback: ["9L1"], + powergem: ["9L1"], + poweruppunch: ["9L1"], + protect: ["9L1"], + pursuit: ["9L1"], + ragingfury: ["9L1"], + raindance: ["9L1"], + rest: ["9L1"], + retaliate: ["9L1"], + return: ["9L1"], + revenge: ["9L1"], + roar: ["9L1"], + rockblast: ["9L1"], + rockpolish: ["9L1"], + rockslide: ["9L1"], + rocksmash: ["9L1"], + rockthrow: ["9L1"], + rocktomb: ["9L1"], + round: ["9L1"], + sandtomb: ["9L1"], + sandstorm: ["9L1"], + scaryface: ["9L1"], + screech: ["9L1"], + secretpower: ["9L1"], + seismictoss: ["9L1"], + shadowclaw: ["9L1"], + shockwave: ["9L1"], + sleeptalk: ["9L1"], + smackdown: ["9L1"], + snarl: ["9L1"], + snore: ["9L1"], + spicyextract: ["9L1"], + spite: ["9L1"], + stealthrock: ["9L1"], + stomp: ["9L1"], + stompingtantrum: ["9L1"], + stoneedge: ["9L1"], + strength: ["9L1"], + substitute: ["9L1"], + sunnyday: ["9L1"], + superpower: ["9L1"], + surf: ["9L1"], + swagger: ["9L1"], + tackle: ["9L1"], + takedown: ["9L1"], + taunt: ["9L1"], + terablast: ["9L1"], + thrash: ["9L1"], + thunder: ["9L1"], + thunderfang: ["9L1"], + thunderpunch: ["9L1"], + thunderwave: ["9L1"], + thunderbolt: ["9L1"], + torment: ["9L1"], + toxic: ["9L1"], + uproar: ["9L1"], + waterpulse: ["9L1"], + whirlpool: ["9L1"], + willowisp: ["9L1"], + }, + }, + nuzcracker: { + learnset: { + absorb: ["9L1"], + aircutter: ["9L1"], + airslash: ["9L1"], + amnesia: ["9L1"], + assurance: ["9L1"], + astonish: ["9L1"], + attract: ["9L1"], + beatup: ["9L1"], + bide: ["9L1"], + bodyslam: ["9L1"], + brickbreak: ["9L1"], + bulkup: ["9L1"], + bulletseed: ["9L1"], + captivate: ["9L1"], + chillingwater: ["9L1"], + closecombat: ["9L1"], + coaching: ["9L1"], + confide: ["9L1"], + curse: ["9L1"], + cut: ["9L1"], + darkpulse: ["9L1"], + defensecurl: ["9L1"], + defog: ["9L1"], + dig: ["9L1"], + doubleteam: ["9L1"], + doubleedge: ["9L1"], + drainpunch: ["9L1"], + embargo: ["9L1"], + endeavor: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + explosion: ["9L1"], + extrasensory: ["9L1"], + facade: ["9L1"], + fakeout: ["9L1"], + falseswipe: ["9L1"], + feintattack: ["9L1"], + flash: ["9L1"], + fling: ["9L1"], + focusblast: ["9L1"], + foulplay: ["9L1"], + frustration: ["9L1"], + furycutter: ["9L1"], + gigadrain: ["9L1"], + grassknot: ["9L1"], + grassyglide: ["9L1"], + grassyterrain: ["9L1"], + growth: ["9L1"], + harden: ["9L1"], + headbutt: ["9L1"], + hiddenpower: ["9L1"], + hyperbeam: ["9L1"], + knockoff: ["9L1"], + leafblade: ["9L1"], + leafstorm: ["9L1"], + leechseed: ["9L1"], + lowkick: ["9L1"], + lowsweep: ["9L1"], + magicalleaf: ["9L1"], + megadrain: ["9L1"], + megakick: ["9L1"], + mimic: ["9L1"], + mudslap: ["9L1"], + naturalgift: ["9L1"], + naturepower: ["9L1"], + nightslash: ["9L1"], + payback: ["9L1"], + poisonjab: ["9L1"], + poisonsting: ["9L1"], + pound: ["9L1"], + powerswap: ["9L1"], + poweruppunch: ["9L1"], + protect: ["9L1"], + psychup: ["9L1"], + quickattack: ["9L1"], + raindance: ["9L1"], + razorleaf: ["9L1"], + razorwind: ["9L1"], + refresh: ["9L1"], + rest: ["9L1"], + retaliate: ["9L1"], + return: ["9L1"], + rockslide: ["9L1"], + rocksmash: ["9L1"], + rocktomb: ["9L1"], + rollout: ["9L1"], + round: ["9L1"], + sacredsword: ["9L1"], + scaryface: ["9L1"], + secretpower: ["9L1"], + seedbomb: ["9L1"], + selfdestruct: ["9L1"], + shadowball: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + solarbeam: ["9L1"], + solarblade: ["9L1"], + spite: ["9L1"], + strength: ["9L1"], + substitute: ["9L1"], + sunnyday: ["9L1"], + swagger: ["9L1"], + swift: ["9L1"], + swordsdance: ["9L1"], + synthesis: ["9L1"], + tackle: ["9L1"], + takedown: ["9L1"], + terablast: ["9L1"], + thief: ["9L1"], + toxic: ["9L1"], + trailblaze: ["9L1"], + twineedle: ["9L1"], + upperhand: ["9L1"], + uproar: ["9L1"], + weatherball: ["9L1"], + worryseed: ["9L1"], + xscissor: ["9L1"], + }, + }, + smorgasbag: { + learnset: { + acid: ["9L1"], + acidspray: ["9L1"], + belch: ["9L1"], + bodyslam: ["9L1"], + bulletseed: ["9L1"], + chillyreception: ["9L1"], + christmascannon: ["9L1"], + clearsmog: ["9L1"], + corrosivegas: ["9L1"], + decorate: ["9L1"], + frustration: ["9L1"], + gastroacid: ["9L1"], + gigaimpact: ["9L1"], + grasswhistle: ["9L1"], + gunkshot: ["9L1"], + haze: ["9L1"], + hyperbeam: ["9L1"], + iciclespear: ["9L1"], + leafstorm: ["9L1"], + metronome: ["9L1"], + pinmissile: ["9L1"], + poisongas: ["9L1"], + present: ["9L1"], + razorwind: ["9L1"], + rest: ["9L1"], + return: ["9L1"], + selfdestruct: ["9L1"], + sleeptalk: ["9L1"], + sludge: ["9L1"], + sludgebomb: ["9L1"], + sludgewave: ["9L1"], + spikes: ["9L1"], + spitup: ["9L1"], + stockpile: ["9L1"], + strangesteam: ["9L1"], + swallow: ["9L1"], + teeterdance: ["9L1"], + terablast: ["9L1"], + toxic: ["9L1"], + toxicspikes: ["9L1"], + woodhammer: ["9L1"], + }, + }, + sableyefestive: { + learnset: { + aerialace: ["9L1"], + allyswitch: ["9L1"], + astonish: ["9L1"], + attract: ["9L1"], + blizzard: ["9L1"], + bodyslam: ["9L1"], + brickbreak: ["9L1"], + brutalswing: ["9L1"], + bulkup: ["9L1"], + calmmind: ["9L1"], + captivate: ["9L1"], + confide: ["9L1"], + confuseray: ["9L1"], + counter: ["9L1"], + cut: ["9L1"], + darkpulse: ["9L1"], + dazzlinggleam: ["9L1"], + detect: ["9L1"], + dig: ["9L1"], + disable: ["9L1"], + doubleteam: ["9L1"], + doubleedge: ["9L1"], + drainpunch: ["9L1"], + dreameater: ["9L1"], + dynamicpunch: ["9L1"], + embargo: ["9L1"], + encore: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + facade: ["9L1"], + fakeout: ["9L1"], + feint: ["9L1"], + feintattack: ["9L1"], + flash: ["9L1"], + flatter: ["9L1"], + fling: ["9L1"], + focuspunch: ["9L1"], + foresight: ["9L1"], + foulplay: ["9L1"], + frustration: ["9L1"], + furycutter: ["9L1"], + furyswipes: ["9L1"], + gigadrain: ["9L1"], + gigaimpact: ["9L1"], + grassyglide: ["9L1"], + grassyterrain: ["9L1"], + gravity: ["9L1"], + gyroball: ["9L1"], + headbutt: ["9L1"], + helpinghand: ["9L1"], + hex: ["9L1"], + hiddenpower: ["9L1"], + honeclaws: ["9L1"], + hyperbeam: ["9L1"], + icebeam: ["9L1"], + icepunch: ["9L1"], + icywind: ["9L1"], + imprison: ["9L1"], + incinerate: ["9L1"], + knockoff: ["9L1"], + lashout: ["9L1"], + leechseed: ["9L1"], + leer: ["9L1"], + lightscreen: ["9L1"], + lowkick: ["9L1"], + lowsweep: ["9L1"], + magiccoat: ["9L1"], + meanlook: ["9L1"], + megakick: ["9L1"], + megapunch: ["9L1"], + metalburst: ["9L1"], + metalclaw: ["9L1"], + metronome: ["9L1"], + mimic: ["9L1"], + moonlight: ["9L1"], + mudshot: ["9L1"], + mudslap: ["9L1"], + nastyplot: ["9L1"], + naturalgift: ["9L1"], + nightshade: ["9L1"], + nightmare: ["9L1"], + octazooka: ["9L1"], + ominouswind: ["9L1"], + painsplit: ["9L1"], + payback: ["9L1"], + phantomforce: ["9L1"], + playrough: ["9L1"], + poisonjab: ["9L1"], + poltergeist: ["9L1"], + powergem: ["9L1"], + poweruppunch: ["9L1"], + present: ["9L1"], + protect: ["9L1"], + psychup: ["9L1"], + punishment: ["9L1"], + quash: ["9L1"], + raindance: ["9L1"], + recover: ["9L1"], + reflect: ["9L1"], + rest: ["9L1"], + retaliate: ["9L1"], + return: ["9L1"], + rocksmash: ["9L1"], + rocktomb: ["9L1"], + roleplay: ["9L1"], + round: ["9L1"], + scratch: ["9L1"], + secretpower: ["9L1"], + seismictoss: ["9L1"], + shadowball: ["9L1"], + shadowclaw: ["9L1"], + shadowsneak: ["9L1"], + shockwave: ["9L1"], + signalbeam: ["9L1"], + skillswap: ["9L1"], + skittersmack: ["9L1"], + sleeptalk: ["9L1"], + snarl: ["9L1"], + snatch: ["9L1"], + snore: ["9L1"], + snowscape: ["9L1"], + solarbeam: ["9L1"], + spite: ["9L1"], + substitute: ["9L1"], + suckerpunch: ["9L1"], + sunnyday: ["9L1"], + swagger: ["9L1"], + takedown: ["9L1"], + taunt: ["9L1"], + telekinesis: ["9L1"], + terablast: ["9L1"], + thief: ["9L1"], + throatchop: ["9L1"], + thunderpunch: ["9L1"], + thunderwave: ["9L1"], + tickle: ["9L1"], + torment: ["9L1"], + toxic: ["9L1"], + trick: ["9L1"], + uturn: ["9L1"], + waterpulse: ["9L1"], + wonderroom: ["9L1"], + woodhammer: ["9L1"], + xscissor: ["9L1"], + }, + }, + mariahcarey: { + learnset: { + attract: ["9L1"], + auroraveil: ["9L1"], + avalanche: ["9L1"], + bodyslam: ["9L1"], + brickbreak: ["9L1"], + charm: ["9L1"], + confide: ["9L1"], + copycat: ["9L1"], + counter: ["9L1"], + covet: ["9L1"], + curse: ["9L1"], + doubleteam: ["9L1"], + doubleedge: ["9L1"], + drainpunch: ["9L1"], + drainingkiss: ["9L1"], + dynamicpunch: ["9L1"], + echoedvoice: ["9L1"], + encore: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + facade: ["9L1"], + fakeout: ["9L1"], + faketears: ["9L1"], + fling: ["9L1"], + focusblast: ["9L1"], + focuspunch: ["9L1"], + frostbreath: ["9L1"], + gigaimpact: ["9L1"], + grassknot: ["9L1"], + hail: ["9L1"], + headbutt: ["9L1"], + healbell: ["9L1"], + helpinghand: ["9L1"], + hyperbeam: ["9L1"], + hypervoice: ["9L1"], + icebeam: ["9L1"], + icepunch: ["9L1"], + iciclespear: ["9L1"], + icywind: ["9L1"], + lick: ["9L1"], + meanlook: ["9L1"], + megakick: ["9L1"], + megapunch: ["9L1"], + metronome: ["9L1"], + mimic: ["9L1"], + mudslap: ["9L1"], + overdrive: ["9L1"], + partingshot: ["9L1"], + payback: ["9L1"], + perishsong: ["9L1"], + pound: ["9L1"], + powdersnow: ["9L1"], + protect: ["9L1"], + psychup: ["9L1"], + psychicnoise: ["9L1"], + recycle: ["9L1"], + round: ["9L1"], + screech: ["9L1"], + seismictoss: ["9L1"], + shadowball: ["9L1"], + sing: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + sparklingaria: ["9L1"], + substitute: ["9L1"], + swagger: ["9L1"], + sweetkiss: ["9L1"], + sweetscent: ["9L1"], + takedown: ["9L1"], + taunt: ["9L1"], + thief: ["9L1"], + thrash: ["9L1"], + torment: ["9L1"], + tripleaxel: ["9L1"], + uproar: ["9L1"], + wish: ["9L1"], + }, + }, + draydol: { + learnset: { + allyswitch: ["9L1"], + ancientpower: ["9L1"], + bodypress: ["9L1"], + bulldoze: ["9L1"], + calmmind: ["9L1"], + chargebeam: ["9L1"], + confide: ["9L1"], + confusion: ["9L1"], + cosmicpower: ["9L1"], + dazzlinggleam: ["9L1"], + dig: ["9L1"], + doubleteam: ["9L1"], + doubleedge: ["9L1"], + dreameater: ["9L1"], + drillrun: ["9L1"], + earthpower: ["9L1"], + earthquake: ["9L1"], + eerieimpulse: ["9L1"], + endure: ["9L1"], + expandingforce: ["9L1"], + explosion: ["9L1"], + extrasensory: ["9L1"], + facade: ["9L1"], + futuresight: ["9L1"], + gigaimpact: ["9L1"], + grassknot: ["9L1"], + gravity: ["9L1"], + guardsplit: ["9L1"], + guardswap: ["9L1"], + gyroball: ["9L1"], + harden: ["9L1"], + headbutt: ["9L1"], + hex: ["9L1"], + hyperbeam: ["9L1"], + icebeam: ["9L1"], + imprison: ["9L1"], + irondefense: ["9L1"], + lightscreen: ["9L1"], + magiccoat: ["9L1"], + meteorbeam: ["9L1"], + mimic: ["9L1"], + miracledrill: ["9L1"], + mudslap: ["9L1"], + nastyplot: ["9L1"], + powergem: ["9L1"], + powersplit: ["9L1"], + powerswap: ["9L1"], + powertrick: ["9L1"], + protect: ["9L1"], + psybeam: ["9L1"], + psychup: ["9L1"], + psychic: ["9L1"], + psychicterrain: ["9L1"], + psyshock: ["9L1"], + raindance: ["9L1"], + rapidspin: ["9L1"], + recycle: ["9L1"], + reflect: ["9L1"], + rest: ["9L1"], + rockblast: ["9L1"], + rockpolish: ["9L1"], + rockslide: ["9L1"], + rocksmash: ["9L1"], + rocktomb: ["9L1"], + round: ["9L1"], + safeguard: ["9L1"], + sandtomb: ["9L1"], + sandstorm: ["9L1"], + scorchingsands: ["9L1"], + selfdestruct: ["9L1"], + shadowball: ["9L1"], + skillswap: ["9L1"], + sleeptalk: ["9L1"], + smackdown: ["9L1"], + snore: ["9L1"], + solarbeam: ["9L1"], + stealthrock: ["9L1"], + stoneedge: ["9L1"], + storedpower: ["9L1"], + strength: ["9L1"], + substitute: ["9L1"], + sunnyday: ["9L1"], + swagger: ["9L1"], + swordsdance: ["9L1"], + teleport: ["9L1"], + toxic: ["9L1"], + trick: ["9L1"], + trickroom: ["9L1"], + tripleaxel: ["9L1"], + wonderroom: ["9L1"], + zenheadbutt: ["9L1"], + }, + }, + gamesi: { + learnset: { + agility: ["9L1"], + assurance: ["9L1"], + attract: ["9L1"], + bite: ["9L1"], + brutalswing: ["9L1"], + bulkup: ["9L1"], + calmmind: ["9L1"], + charge: ["9L1"], + chargebeam: ["9L1"], + darkpulse: ["9L1"], + darkestlariat: ["9L1"], + drainpunch: ["9L1"], + electricterrain: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + facade: ["9L1"], + flatter: ["9L1"], + fling: ["9L1"], + focusenergy: ["9L1"], + gigaimpact: ["9L1"], + helpinghand: ["9L1"], + hyperbeam: ["9L1"], + knockoff: ["9L1"], + lashout: ["9L1"], + leer: ["9L1"], + megakick: ["9L1"], + payback: ["9L1"], + poisonjab: ["9L1"], + protect: ["9L1"], + psychup: ["9L1"], + quash: ["9L1"], + rest: ["9L1"], + risingvoltage: ["9L1"], + scaryface: ["9L1"], + slackoff: ["9L1"], + sleeptalk: ["9L1"], + sludgebomb: ["9L1"], + snarl: ["9L1"], + snore: ["9L1"], + snowscape: ["9L1"], + spark: ["9L1"], + spite: ["9L1"], + substitute: ["9L1"], + suckerpunch: ["9L1"], + swagger: ["9L1"], + swift: ["9L1"], + tackle: ["9L1"], + takedown: ["9L1"], + taunt: ["9L1"], + terablast: ["9L1"], + thief: ["9L1"], + throatchop: ["9L1"], + thunder: ["9L1"], + thundershock: ["9L1"], + thunderwave: ["9L1"], + thunderbolt: ["9L1"], + thunderclap: ["9L1"], + torment: ["9L1"], + uproar: ["9L1"], + volttackle: ["9L1"], + weatherball: ["9L1"], + wildcharge: ["9L1"], + workup: ["9L1"], + }, + }, + vipux: { + learnset: { + aquatail: ["9L1"], + bite: ["9L1"], + breakingswipe: ["9L1"], + calmmind: ["9L1"], + coil: ["9L1"], + covet: ["9L1"], + crunch: ["9L1"], + disable: ["9L1"], + dragondance: ["9L1"], + dragonhammer: ["9L1"], + dragonpulse: ["9L1"], + dragonrush: ["9L1"], + earthquake: ["9L1"], + encore: ["9L1"], + facade: ["9L1"], + fireblast: ["9L1"], + firefang: ["9L1"], + gigadrain: ["9L1"], + gigaimpact: ["9L1"], + glare: ["9L1"], + grassyglide: ["9L1"], + grassyterrain: ["9L1"], + haze: ["9L1"], + hex: ["9L1"], + hyperfang: ["9L1"], + icefang: ["9L1"], + infestation: ["9L1"], + irontail: ["9L1"], + jawlock: ["9L1"], + knockoff: ["9L1"], + leafstorm: ["9L1"], + leechseed: ["9L1"], + makeitrain: ["9L1"], + moneytrees: ["9L1"], + nastyplot: ["9L1"], + outrage: ["9L1"], + payday: ["9L1"], + petalblizzard: ["9L1"], + poisonfang: ["9L1"], + protect: ["9L1"], + psychicfangs: ["9L1"], + rest: ["9L1"], + scaleshot: ["9L1"], + seedbomb: ["9L1"], + sleeptalk: ["9L1"], + snarl: ["9L1"], + substitute: ["9L1"], + suckerpunch: ["9L1"], + sunnyday: ["9L1"], + switcheroo: ["9L1"], + synthesis: ["9L1"], + tailslap: ["9L1"], + tailwhip: ["9L1"], + taunt: ["9L1"], + thunderfang: ["9L1"], + thunderwave: ["9L1"], + toxic: ["9L1"], + toxicspikes: ["9L1"], + trailblaze: ["9L1"], + weatherball: ["9L1"], + willowisp: ["9L1"], + yawn: ["9L1"], + }, + }, + popsicelf: { + learnset: { + aerialace: ["9L1"], + agility: ["9L1"], + alluringvoice: ["9L1"], + attract: ["9L1"], + avalanche: ["9L1"], + blizzard: ["9L1"], + bulkup: ["9L1"], + burningjealousy: ["9L1"], + dazzlinggleam: ["9L1"], + drainpunch: ["9L1"], + ember: ["9L1"], + endure: ["9L1"], + facade: ["9L1"], + fireblast: ["9L1"], + firepunch: ["9L1"], + firespin: ["9L1"], + flamewheel: ["9L1"], + flamethrower: ["9L1"], + flareblitz: ["9L1"], + fling: ["9L1"], + focusenergy: ["9L1"], + gigaimpact: ["9L1"], + grassknot: ["9L1"], + heatwave: ["9L1"], + helpinghand: ["9L1"], + hyperbeam: ["9L1"], + icebeam: ["9L1"], + icepunch: ["9L1"], + iceshard: ["9L1"], + icespinner: ["9L1"], + incinerate: ["9L1"], + leer: ["9L1"], + liquidation: ["9L1"], + megakick: ["9L1"], + overheat: ["9L1"], + payback: ["9L1"], + powdersnow: ["9L1"], + protect: ["9L1"], + psychup: ["9L1"], + quickattack: ["9L1"], + rest: ["9L1"], + rockslide: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + snowscape: ["9L1"], + solarbeam: ["9L1"], + substitute: ["9L1"], + sunnyday: ["9L1"], + tackle: ["9L1"], + takedown: ["9L1"], + taunt: ["9L1"], + temperflare: ["9L1"], + terablast: ["9L1"], + tripleaxel: ["9L1"], + uturn: ["9L1"], + uproar: ["9L1"], + weatherball: ["9L1"], + willowisp: ["9L1"], + workup: ["9L1"], + zenheadbutt: ["9L1"], + }, + }, + bellbeque: { + learnset: { + alluringvoice: ["9L1"], + autotomize: ["9L1"], + block: ["9L1"], + bodyslam: ["9L1"], + burnup: ["9L1"], + flamecharge: ["9L1"], + flamethrower: ["9L1"], + flashcannon: ["9L1"], + gyroball: ["9L1"], + healbell: ["9L1"], + heatcrash: ["9L1"], + heavyslam: ["9L1"], + irondefense: ["9L1"], + ironhead: ["9L1"], + perishsong: ["9L1"], + torchsong: ["9L1"], + voltswitch: ["9L1"], + willowisp: ["9L1"], + yawn: ["9L1"], + }, + }, + chorislam: { + learnset: { + agility: ["9L1"], + attract: ["9L1"], + aurasphere: ["9L1"], + bodypress: ["9L1"], + bulkup: ["9L1"], + charm: ["9L1"], + closecombat: ["9L1"], + confide: ["9L1"], + covet: ["9L1"], + defensecurl: ["9L1"], + doubleedge: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + facade: ["9L1"], + fling: ["9L1"], + focusblast: ["9L1"], + focusenergy: ["9L1"], + foresight: ["9L1"], + gigaimpact: ["9L1"], + gunkshot: ["9L1"], + highjumpkick: ["9L1"], + hyperbeam: ["9L1"], + hypervoice: ["9L1"], + irondefense: ["9L1"], + jumpkick: ["9L1"], + knockoff: ["9L1"], + leer: ["9L1"], + megakick: ["9L1"], + protect: ["9L1"], + psychup: ["9L1"], + rest: ["9L1"], + return: ["9L1"], + shadowball: ["9L1"], + slackoff: ["9L1"], + sleeptalk: ["9L1"], + sludgebomb: ["9L1"], + snore: ["9L1"], + snowscape: ["9L1"], + substitute: ["9L1"], + swift: ["9L1"], + tackle: ["9L1"], + takedown: ["9L1"], + teeterdance: ["9L1"], + terablast: ["9L1"], + thief: ["9L1"], + uturn: ["9L1"], + uproar: ["9L1"], + workup: ["9L1"], + }, + }, + gholdengofestive: { + learnset: { + astonish: ["9L1"], + cashout: ["9L1"], + chargebeam: ["9L1"], + confuseray: ["9L1"], + dazzlinggleam: ["9L1"], + electroball: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + facade: ["9L1"], + flashcannon: ["9L1"], + fling: ["9L1"], + focusblast: ["9L1"], + focuspunch: ["9L1"], + gigadrain: ["9L1"], + gigaimpact: ["9L1"], + heavyslam: ["9L1"], + hyperbeam: ["9L1"], + leechseed: ["9L1"], + lightscreen: ["9L1"], + lowkick: ["9L1"], + lowsweep: ["9L1"], + magicalleaf: ["9L1"], + makeitrain: ["9L1"], + megadrain: ["9L1"], + memento: ["9L1"], + metalclaw: ["9L1"], + metalsound: ["9L1"], + nightshade: ["9L1"], + poltergeist: ["9L1"], + powergem: ["9L1"], + protect: ["9L1"], + psychic: ["9L1"], + psyshock: ["9L1"], + reflect: ["9L1"], + rest: ["9L1"], + sandstorm: ["9L1"], + scratch: ["9L1"], + shadowball: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + solarbeam: ["9L1"], + steelbeam: ["9L1"], + synthesis: ["9L1"], + takedown: ["9L1"], + thief: ["9L1"], + thunder: ["9L1"], + thunderpunch: ["9L1"], + thunderwave: ["9L1"], + thunderbolt: ["9L1"], + trick: ["9L1"], + }, + }, + indeedeecook: { + learnset: { + alluringvoice: ["9L1"], + allyswitch: ["9L1"], + aromatherapy: ["9L1"], + attract: ["9L1"], + batonpass: ["9L1"], + bodyslam: ["9L1"], + burnup: ["9L1"], + calmmind: ["9L1"], + charm: ["9L1"], + dazzlinggleam: ["9L1"], + disarmingvoice: ["9L1"], + drainpunch: ["9L1"], + drainingkiss: ["9L1"], + ember: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + expandingforce: ["9L1"], + facade: ["9L1"], + fakeout: ["9L1"], + filletaway: ["9L1"], + fireblast: ["9L1"], + firespin: ["9L1"], + flamecharge: ["9L1"], + flamethrower: ["9L1"], + followme: ["9L1"], + futuresight: ["9L1"], + guardsplit: ["9L1"], + guardswap: ["9L1"], + healpulse: ["9L1"], + healingwish: ["9L1"], + helpinghand: ["9L1"], + hypervoice: ["9L1"], + imprison: ["9L1"], + incinerate: ["9L1"], + lightscreen: ["9L1"], + magicalleaf: ["9L1"], + metronome: ["9L1"], + mysticalfire: ["9L1"], + overheat: ["9L1"], + payday: ["9L1"], + playnice: ["9L1"], + playrough: ["9L1"], + protect: ["9L1"], + psybeam: ["9L1"], + psychup: ["9L1"], + psychic: ["9L1"], + psychicterrain: ["9L1"], + psychoshift: ["9L1"], + psyshock: ["9L1"], + reflect: ["9L1"], + rest: ["9L1"], + round: ["9L1"], + safeguard: ["9L1"], + shadowball: ["9L1"], + skillswap: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + softboiled: ["9L1"], + storedpower: ["9L1"], + stuffcheeks: ["9L1"], + substitute: ["9L1"], + sweetscent: ["9L1"], + swift: ["9L1"], + takedown: ["9L1"], + terablast: ["9L1"], + terrainpulse: ["9L1"], + trick: ["9L1"], + trickroom: ["9L1"], + willowisp: ["9L1"], + zenheadbutt: ["9L1"], + }, + }, + dulceirene: { + learnset: { + acidarmor: ["9L1"], + alluringvoice: ["9L1"], + aromatherapy: ["9L1"], + aromaticmist: ["9L1"], + attract: ["9L1"], + babydolleyes: ["9L1"], + calmmind: ["9L1"], + celebrate: ["9L1"], + charm: ["9L1"], + dazzlinggleam: ["9L1"], + decorate: ["9L1"], + disarmingvoice: ["9L1"], + drainpunch: ["9L1"], + drainingkiss: ["9L1"], + encore: ["9L1"], + endeavor: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + entrainment: ["9L1"], + facade: ["9L1"], + faketears: ["9L1"], + fling: ["9L1"], + gigadrain: ["9L1"], + gigaimpact: ["9L1"], + haze: ["9L1"], + healpulse: ["9L1"], + helpinghand: ["9L1"], + hyperbeam: ["9L1"], + icebeam: ["9L1"], + imprison: ["9L1"], + lastresort: ["9L1"], + lightscreen: ["9L1"], + magicroom: ["9L1"], + magicalleaf: ["9L1"], + metronome: ["9L1"], + mistyexplosion: ["9L1"], + mistyterrain: ["9L1"], + moonblast: ["9L1"], + moonlight: ["9L1"], + mysticalfire: ["9L1"], + painsplit: ["9L1"], + playrough: ["9L1"], + pollenpuff: ["9L1"], + protect: ["9L1"], + psychup: ["9L1"], + psychic: ["9L1"], + psyshock: ["9L1"], + recover: ["9L1"], + rest: ["9L1"], + round: ["9L1"], + safeguard: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + solarbeam: ["9L1"], + storedpower: ["9L1"], + substitute: ["9L1"], + sweetkiss: ["9L1"], + sweetscent: ["9L1"], + tackle: ["9L1"], + teleport: ["9L1"], + terablast: ["9L1"], + terrainpulse: ["9L1"], + toxic: ["9L1"], + triattack: ["9L1"], + wish: ["9L1"], + wonderroom: ["9L1"], + }, + }, + wreith: { + learnset: { + decorate: ["9L1"], + gigadrain: ["9L1"], + haze: ["9L1"], + healbell: ["9L1"], + icebeam: ["9L1"], + icywind: ["9L1"], + leechseed: ["9L1"], + mirrorcoat: ["9L1"], + nastyplot: ["9L1"], + painsplit: ["9L1"], + poltergeist: ["9L1"], + powerwhip: ["9L1"], + rapidspin: ["9L1"], + shadowball: ["9L1"], + spikyshield: ["9L1"], + synthesis: ["9L1"], + trickroom: ["9L1"], + willowisp: ["9L1"], + }, + }, + eternalflowerwreith: { + learnset: { + acid: ["9L1"], + acidspray: ["9L1"], + bulletseed: ["9L1"], + crosspoison: ["9L1"], + dazzlinggleam: ["9L1"], + decorate: ["9L1"], + drainingkiss: ["9L1"], + energyball: ["9L1"], + fairywind: ["9L1"], + floralhealing: ["9L1"], + flowershield: ["9L1"], + forestscurse: ["9L1"], + gigadrain: ["9L1"], + grassyterrain: ["9L1"], + growth: ["9L1"], + healbell: ["9L1"], + hex: ["9L1"], + icebeam: ["9L1"], + icywind: ["9L1"], + infestation: ["9L1"], + ingrain: ["9L1"], + leafblade: ["9L1"], + leechseed: ["9L1"], + lifedew: ["9L1"], + lightofruin: ["9L1"], + memento: ["9L1"], + mirrorcoat: ["9L1"], + mistyterrain: ["9L1"], + nastyplot: ["9L1"], + naturalgift: ["9L1"], + naturepower: ["9L1"], + painsplit: ["9L1"], + petalblizzard: ["9L1"], + petaldance: ["9L1"], + poisonjab: ["9L1"], + poisonpowder: ["9L1"], + poisonsting: ["9L1"], + pollenpuff: ["9L1"], + powerwhip: ["9L1"], + rapidspin: ["9L1"], + razorleaf: ["9L1"], + safeguard: ["9L1"], + seedbomb: ["9L1"], + shadowball: ["9L1"], + sludge: ["9L1"], + sludgebomb: ["9L1"], + sludgewave: ["9L1"], + smog: ["9L1"], + solarbeam: ["9L1"], + spiritbreak: ["9L1"], + spikyshield: ["9L1"], + stunspore: ["9L1"], + sweetscent: ["9L1"], + toxicspikes: ["9L1"], + toxicthread: ["9L1"], + trickroom: ["9L1"], + venomdrench: ["9L1"], + venoshock: ["9L1"], + vinewhip: ["9L1"], + worryseed: ["9L1"], + }, + }, + clamperlalola: { + learnset: { + aquaring: ["9L1"], + attract: ["9L1"], + bodyslam: ["9L1"], + brine: ["9L1"], + confuseray: ["9L1"], + doubleteam: ["9L1"], + earthpower: ["9L1"], + earthquake: ["9L1"], + endure: ["9L1"], + facade: ["9L1"], + flashcannon: ["9L1"], + hail: ["9L1"], + irondefense: ["9L1"], + muddywater: ["9L1"], + powergem: ["9L1"], + protect: ["9L1"], + raindance: ["9L1"], + rest: ["9L1"], + rockslide: ["9L1"], + rocktomb: ["9L1"], + scald: ["9L1"], + sleeptalk: ["9L1"], + spikes: ["9L1"], + stealthrock: ["9L1"], + stoneedge: ["9L1"], + substitute: ["9L1"], + supersonic: ["9L1"], + surf: ["9L1"], + swagger: ["9L1"], + watergun: ["9L1"], + waterpulse: ["9L1"], + waterfall: ["9L1"], + whirlpool: ["9L1"], + }, + }, + goodybyss: { + learnset: { + agility: ["9L1"], + amnesia: ["9L1"], + aquaring: ["9L1"], + aquatail: ["9L1"], + attract: ["9L1"], + batonpass: ["9L1"], + bodyslam: ["9L1"], + breakingswipe: ["9L1"], + brine: ["9L1"], + coil: ["9L1"], + confuseray: ["9L1"], + confusion: ["9L1"], + dive: ["9L1"], + doubleteam: ["9L1"], + dracometeor: ["9L1"], + dragoncheer: ["9L1"], + dragonclaw: ["9L1"], + dragondance: ["9L1"], + dragonpulse: ["9L1"], + dragontail: ["9L1"], + drainingkiss: ["9L1"], + earthpower: ["9L1"], + earthquake: ["9L1"], + endure: ["9L1"], + facade: ["9L1"], + flashcannon: ["9L1"], + gigaimpact: ["9L1"], + hail: ["9L1"], + headsmash: ["9L1"], + hydropump: ["9L1"], + hyperbeam: ["9L1"], + irondefense: ["9L1"], + meteorbeam: ["9L1"], + muddywater: ["9L1"], + outrage: ["9L1"], + powergem: ["9L1"], + protect: ["9L1"], + psychup: ["9L1"], + psychic: ["9L1"], + raindance: ["9L1"], + rest: ["9L1"], + rockslide: ["9L1"], + rocktomb: ["9L1"], + roost: ["9L1"], + safeguard: ["9L1"], + scald: ["9L1"], + shadowball: ["9L1"], + sleeptalk: ["9L1"], + spikes: ["9L1"], + stealthrock: ["9L1"], + stoneedge: ["9L1"], + substitute: ["9L1"], + supersonic: ["9L1"], + surf: ["9L1"], + swagger: ["9L1"], + twister: ["9L1"], + watergun: ["9L1"], + waterpulse: ["9L1"], + waterfall: ["9L1"], + whirlpool: ["9L1"], + }, + }, + naughtail: { + learnset: { + aquaring: ["9L1"], + aquatail: ["9L1"], + attract: ["9L1"], + batonpass: ["9L1"], + bite: ["9L1"], + bodyslam: ["9L1"], + brine: ["9L1"], + coil: ["9L1"], + confuseray: ["9L1"], + crunch: ["9L1"], + darkpulse: ["9L1"], + dive: ["9L1"], + doubleteam: ["9L1"], + dragondance: ["9L1"], + earthpower: ["9L1"], + earthquake: ["9L1"], + endure: ["9L1"], + facade: ["9L1"], + flashcannon: ["9L1"], + gigaimpact: ["9L1"], + gunkshot: ["9L1"], + hail: ["9L1"], + headsmash: ["9L1"], + hydropump: ["9L1"], + hyperbeam: ["9L1"], + icefang: ["9L1"], + irondefense: ["9L1"], + knockoff: ["9L1"], + meteorbeam: ["9L1"], + muddywater: ["9L1"], + nastyplot: ["9L1"], + powergem: ["9L1"], + protect: ["9L1"], + raindance: ["9L1"], + rest: ["9L1"], + rockslide: ["9L1"], + rocktomb: ["9L1"], + scald: ["9L1"], + scaryface: ["9L1"], + screech: ["9L1"], + slackoff: ["9L1"], + sleeptalk: ["9L1"], + sludgebomb: ["9L1"], + smog: ["9L1"], + snarl: ["9L1"], + spikes: ["9L1"], + stealthrock: ["9L1"], + stoneedge: ["9L1"], + substitute: ["9L1"], + suckerpunch: ["9L1"], + supersonic: ["9L1"], + surf: ["9L1"], + swagger: ["9L1"], + toxic: ["9L1"], + watergun: ["9L1"], + waterpulse: ["9L1"], + waterfall: ["9L1"], + whirlpool: ["9L1"], + }, + }, + gospiel: { + learnset: { + afteryou: ["9L1"], + allyswitch: ["9L1"], + bubble: ["9L1"], + calmmind: ["9L1"], + confusion: ["9L1"], + cosmicpower: ["9L1"], + dazzlinggleam: ["9L1"], + ember: ["9L1"], + followme: ["9L1"], + futuresight: ["9L1"], + gravity: ["9L1"], + growl: ["9L1"], + guardsplit: ["9L1"], + healingwish: ["9L1"], + hypervoice: ["9L1"], + icywind: ["9L1"], + imprison: ["9L1"], + lunardance: ["9L1"], + magicroom: ["9L1"], + mirrorcoat: ["9L1"], + moonblast: ["9L1"], + moonlight: ["9L1"], + morningsun: ["9L1"], + mysticalfire: ["9L1"], + nightshade: ["9L1"], + ominouswind: ["9L1"], + petaldance: ["9L1"], + powerswap: ["9L1"], + powertrick: ["9L1"], + psybeam: ["9L1"], + psychoshift: ["9L1"], + psychic: ["9L1"], + psychicnoise: ["9L1"], + psyshock: ["9L1"], + psywave: ["9L1"], + shadowball: ["9L1"], + storedpower: ["9L1"], + swift: ["9L1"], + synchronoise: ["9L1"], + tackle: ["9L1"], + teleport: ["9L1"], + triattack: ["9L1"], + trick: ["9L1"], + trickroom: ["9L1"], + wish: ["9L1"], + wonderroom: ["9L1"], + }, + }, + rusalvia: { + learnset: { + afteryou: ["9L1"], + alluringvoice: ["9L1"], + allyswitch: ["9L1"], + bubble: ["9L1"], + calmmind: ["9L1"], + confusion: ["9L1"], + cosmicpower: ["9L1"], + dazzlinggleam: ["9L1"], + ember: ["9L1"], + flipturn: ["9L1"], + followme: ["9L1"], + futuresight: ["9L1"], + gravity: ["9L1"], + growl: ["9L1"], + guardsplit: ["9L1"], + healingwish: ["9L1"], + hydropump: ["9L1"], + hypervoice: ["9L1"], + icebeam: ["9L1"], + icywind: ["9L1"], + imprison: ["9L1"], + lunardance: ["9L1"], + magicroom: ["9L1"], + mirrorcoat: ["9L1"], + moonblast: ["9L1"], + moonlight: ["9L1"], + morningsun: ["9L1"], + mysticalfire: ["9L1"], + nightshade: ["9L1"], + ominouswind: ["9L1"], + petaldance: ["9L1"], + powerswap: ["9L1"], + powertrick: ["9L1"], + psybeam: ["9L1"], + psychic: ["9L1"], + psychicnoise: ["9L1"], + psychoshift: ["9L1"], + psyshock: ["9L1"], + psywave: ["9L1"], + raindance: ["9L1"], + shadowball: ["9L1"], + storedpower: ["9L1"], + surf: ["9L1"], + swift: ["9L1"], + synchronoise: ["9L1"], + tackle: ["9L1"], + teleport: ["9L1"], + triattack: ["9L1"], + trick: ["9L1"], + trickroom: ["9L1"], + wish: ["9L1"], + wonderroom: ["9L1"], + }, + }, + seraphexe: { + learnset: { + afteryou: ["9L1"], + allyswitch: ["9L1"], + bubble: ["9L1"], + calmmind: ["9L1"], + confusion: ["9L1"], + cosmicpower: ["9L1"], + dazzlinggleam: ["9L1"], + disable: ["9L1"], + ember: ["9L1"], + encore: ["9L1"], + fierydance: ["9L1"], + fireblast: ["9L1"], + flamethrower: ["9L1"], + followme: ["9L1"], + futuresight: ["9L1"], + gravity: ["9L1"], + growl: ["9L1"], + guardsplit: ["9L1"], + healingwish: ["9L1"], + heartswap: ["9L1"], + hypervoice: ["9L1"], + icywind: ["9L1"], + imprison: ["9L1"], + lunardance: ["9L1"], + magicroom: ["9L1"], + mirrorcoat: ["9L1"], + moonblast: ["9L1"], + moonlight: ["9L1"], + morningsun: ["9L1"], + mysticalfire: ["9L1"], + nightshade: ["9L1"], + ominouswind: ["9L1"], + petaldance: ["9L1"], + powerswap: ["9L1"], + powertrick: ["9L1"], + psybeam: ["9L1"], + psychic: ["9L1"], + psychicnoise: ["9L1"], + psychoshift: ["9L1"], + psyshock: ["9L1"], + psywave: ["9L1"], + shadowball: ["9L1"], + storedpower: ["9L1"], + swift: ["9L1"], + synchronoise: ["9L1"], + tackle: ["9L1"], + teleport: ["9L1"], + triattack: ["9L1"], + trick: ["9L1"], + trickroom: ["9L1"], + willowisp: ["9L1"], + wish: ["9L1"], + wonderroom: ["9L1"], + }, + }, + mirrelette: { + learnset: { + allyswitch: ["9L1"], + aurasphere: ["9L1"], + aurorabeam: ["9L1"], + auroraveil: ["9L1"], + blizzard: ["9L1"], + bodypress: ["9L1"], + burningjealousy: ["9L1"], + chillingwater: ["9L1"], + confide: ["9L1"], + craftyshield: ["9L1"], + dazzlinggleam: ["9L1"], + entrainment: ["9L1"], + flash: ["9L1"], + flashcannon: ["9L1"], + foulplay: ["9L1"], + freezedry: ["9L1"], + gigadrain: ["9L1"], + haze: ["9L1"], + heartswap: ["9L1"], + heavyslam: ["9L1"], + icebeam: ["9L1"], + iceshard: ["9L1"], + icespinner: ["9L1"], + iciclecrash: ["9L1"], + icywind: ["9L1"], + imprison: ["9L1"], + irondefense: ["9L1"], + ironhead: ["9L1"], + magiccoat: ["9L1"], + magicroom: ["9L1"], + metalsound: ["9L1"], + mirrorcoat: ["9L1"], + mirrorshot: ["9L1"], + mist: ["9L1"], + moonlight: ["9L1"], + nightshade: ["9L1"], + pound: ["9L1"], + powdersnow: ["9L1"], + powergem: ["9L1"], + psychup: ["9L1"], + reflecttype: ["9L1"], + revelationray: ["9L1"], + roleplay: ["9L1"], + safeguard: ["9L1"], + skillswap: ["9L1"], + snatch: ["9L1"], + snowscape: ["9L1"], + steelbeam: ["9L1"], + trick: ["9L1"], + weatherball: ["9L1"], + wonderroom: ["9L1"], + }, + }, + klefkimccallister: { + learnset: { + astonish: ["9L1"], + calmmind: ["9L1"], + dazzlinggleam: ["9L1"], + drainingkiss: ["9L1"], + endure: ["9L1"], + facade: ["9L1"], + fairylock: ["9L1"], + fairywind: ["9L1"], + flashcannon: ["9L1"], + foulplay: ["9L1"], + gigaimpact: ["9L1"], + hyperbeam: ["9L1"], + imprison: ["9L1"], + irondefense: ["9L1"], + lastresort: ["9L1"], + lightscreen: ["9L1"], + magicroom: ["9L1"], + magnetrise: ["9L1"], + metalsound: ["9L1"], + mistyterrain: ["9L1"], + playrough: ["9L1"], + protect: ["9L1"], + psychup: ["9L1"], + psychic: ["9L1"], + psyshock: ["9L1"], + raindance: ["9L1"], + recycle: ["9L1"], + reflect: ["9L1"], + rest: ["9L1"], + sandstorm: ["9L1"], + skittersmack: ["9L1"], + sleeptalk: ["9L1"], + spikes: ["9L1"], + steelbeam: ["9L1"], + storedpower: ["9L1"], + substitute: ["9L1"], + sunnyday: ["9L1"], + swift: ["9L1"], + switcheroo: ["9L1"], + tackle: ["9L1"], + terablast: ["9L1"], + thief: ["9L1"], + thunderwave: ["9L1"], + torment: ["9L1"], + trickroom: ["9L1"], + flamethrower: ["9L1"], + flameblast: ["9L1"], + overheat: ["9L1"], + pursuit: ["9L1"], + flamecharge: ["9L1"], + willowisp: ["9L1"], + burningbulwark: ["9L1"], + craftyshield: ["9L1"], + painsplit: ["9L1"], + taunt: ["9L1"], + }, + }, + sacchamorte: { + learnset: { + umbralscythe: ["9L1"], + acidarmor: ["9L1"], + acidspray: ["9L1"], + aquacutter: ["9L1"], + aquaring: ["9L1"], + astonish: ["9L1"], + bite: ["9L1"], + bodyslam: ["9L1"], + brutalswing: ["9L1"], + confuseray: ["9L1"], + cosmicpower: ["9L1"], + crosspoison: ["9L1"], + curse: ["9L1"], + darkpulse: ["9L1"], + destinybond: ["9L1"], + disable: ["9L1"], + doubleedge: ["9L1"], + dreameater: ["9L1"], + embargo: ["9L1"], + grudge: ["9L1"], + gunkshot: ["9L1"], + hex: ["9L1"], + imprison: ["9L1"], + lifedew: ["9L1"], + lunge: ["9L1"], + meanlook: ["9L1"], + nightshade: ["9L1"], + nightmare: ["9L1"], + painsplit: ["9L1"], + partingshot: ["9L1"], + phantomforce: ["9L1"], + poisongas: ["9L1"], + poisonjab: ["9L1"], + psychic: ["9L1"], + pursuit: ["9L1"], + shadowclaw: ["9L1"], + shadowsneak: ["9L1"], + signalbeam: ["9L1"], + skittersmack: ["9L1"], + sludgebomb: ["9L1"], + sludgewave: ["9L1"], + snarl: ["9L1"], + spite: ["9L1"], + stealthrock: ["9L1"], + submission: ["9L1"], + suckerpunch: ["9L1"], + swordsdance: ["9L1"], + sweetkiss: ["9L1"], + sweetscent: ["9L1"], + taunt: ["9L1"], + teeterdance: ["9L1"], + throatchop: ["9L1"], + toxicspikes: ["9L1"], + torment: ["9L1"], + venomdrench: ["9L1"], + wildcharge: ["9L1"], + wish: ["9L1"], + }, + }, + treench: { + learnset: { + darkestlatiat: ["9L1"], + throatchop: ["9L1"], + leafblade: ["9L1"], + woodhammer: ["9L1"], + suckerpunch: ["9L1"], + spiritbreak: ["9L1"], + drainpunch: ["9L1"], + icepunch: ["9L1"], + poisonjab: ["9L1"], + nastyplot: ["9L1"], + spikes: ["9L1"], + taunt: ["9L1"], + thunderwave: ["9L1"], + spikyshield: ["9L1"], + recycle: ["9L1"], + energyball: ["9L1"], + darkpulse: ["9L1"], + icebeam: ["9L1"], + flamethrower: ["9L1"], + sludgebomb: ["9L1"], + gigadrain: ["9L1"], + megadrain: ["9L1"], + absorb: ["9L1"], + seedbomb: ["9L1"], + grassknot: ["9L1"], + acrobatics: ["9L1"], + lashout: ["9L1"], + leafstorm: ["9L1"], + lowkick: ["9L1"], + trailblaze: ["9L1"], + assurance: ["9L1"], + brutalswing: ["9L1"], + bulletseed: ["9L1"], + vinewhip: ["9L1"], + ingrain: ["9L1"], + dig: ["9L1"], + grassyglide: ["9L1"], + grassyterrain: ["9L1"], + solarbeam: ["9L1"], + solarblade: ["9L1"], + magicalleaf: ["9L1"], + leer: ["9L1"], + megakick: ["9L1"], + payback: ["9L1"], + scaryface: ["9L1"], + tackle: ["9L1"], + snarl: ["9L1"], + snowscape: ["9L1"], + swagger: ["9L1"], + powdersnow: ["9L1"], + swift: ["9L1"], + thief: ["9L1"], + protect: ["9L1"], + endure: ["9L1"], + substitute: ["9L1"], + rest: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + takedown: ["9L1"], + terablast: ["9L1"], + facade: ["9L1"], + attract: ["9L1"], + gigaimpact: ["9L1"], + hyperbeam: ["9L1"], + fling: ["9L1"], + focusenergy: ["9L1"], + uproar: ["9L1"], + agility: ["9L1"], + psychup: ["9L1"], + workup: ["9L1"], + weatherball: ["9L1"], + helpinghand: ["9L1"], + }, + }, + grincheartcaged: { + learnset: { + dazzlinggleam: ["9L1"], + alluringvoice: ["9L1"], + expandingforce: ["9L1"], + storedpower: ["9L1"], + steelbeam: ["9L1"], + flashcannon: ["9L1"], + focusblast: ["9L1"], + aurasphere: ["9L1"], + vacuumwave: ["9L1"], + spiritbreak: ["9L1"], + playrough: ["9L1"], + ironhead: ["9L1"], + hardpress: ["9L1"], + closecombat: ["9L1"], + superpower: ["9L1"], + sacredsword: ["9L1"], + seismictoss: ["9L1"], + drainpunch: ["9L1"], + brickbreak: ["9L1"], + upperhand: ["9L1"], + heartstamp: ["9L1"], + xscissor: ["9L1"], + slash: ["9L1"], + furycutter: ["9L1"], + cut: ["9L1"], + growth: ["9L1"], + heartswap: ["9L1"], + takeheart: ["9L1"], + bulkup: ["9L1"], + charm: ["9L1"], + irondefense: ["9L1"], + }, + }, + lelitoccia: { + learnset: { + diracsea: ["9L1"], + afteryou: ["9L1"], + airslash: ["9L1"], + allyswitch: ["9L1"], + ancientpower: ["9L1"], + astonish: ["9L1"], + block: ["9L1"], + confuseray: ["9L1"], + curse: ["9L1"], + darkpulse: ["9L1"], + destinybond: ["9L1"], + detect: ["9L1"], + disable: ["9L1"], + dreameater: ["9L1"], + embargo: ["9L1"], + extrasensory: ["9L1"], + flash: ["9L1"], + flashcannon: ["9L1"], + foresight: ["9L1"], + futuresight: ["9L1"], + gigadrain: ["9L1"], + gravity: ["9L1"], + grudge: ["9L1"], + guardswap: ["9L1"], + healblock: ["9L1"], + hex: ["9L1"], + icebeam: ["9L1"], + icywind: ["9L1"], + imprison: ["9L1"], + laserfocus: ["9L1"], + leer: ["9L1"], + magiccoat: ["9L1"], + magicroom: ["9L1"], + memento: ["9L1"], + meteorbeam: ["9L1"], + miracleeye: ["9L1"], + moonlight: ["9L1"], + nightshade: ["9L1"], + nightmare: ["9L1"], + ominouswind: ["9L1"], + painsplit: ["9L1"], + phantomforce: ["9L1"], + powergem: ["9L1"], + powerswap: ["9L1"], + powertrick: ["9L1"], + pound: ["9L1"], + psychic: ["9L1"], + psychicterrain: ["9L1"], + psyshock: ["9L1"], + punishment: ["9L1"], + rockblast: ["9L1"], + rockpolish: ["9L1"], + rockslide: ["9L1"], + rockthrow: ["9L1"], + roleplay: ["9L1"], + sandstorm: ["9L1"], + shadowball: ["9L1"], + shadowsneak: ["9L1"], + skillswap: ["9L1"], + smackdown: ["9L1"], + spite: ["9L1"], + stealthrock: ["9L1"], + stoneedge: ["9L1"], + taunt: ["9L1"], + telekinesis: ["9L1"], + teleport: ["9L1"], + trick: ["9L1"], + trickroom: ["9L1"], + wonderroom: ["9L1"], + }, + }, + deckherd: { + learnset: { + makeitrain: ["9L1"], + flashcannon: ["9L1"], + darkpulse: ["9L1"], + baddybad: ["9L1"], + hypervoice: ["9L1"], + snarl: ["9L1"], + payday: ["9L1"], + payback: ["9L1"], + bodyslam: ["9L1"], + doubleedge: ["9L1"], + megakick: ["9L1"], + takedown: ["9L1"], + lastresort: ["9L1"], + headbutt: ["9L1"], + doublehit: ["9L1"], + covet: ["9L1"], + ironhead: ["9L1"], + bite: ["9L1"], + crunch: ["9L1"], + suckerpunch: ["9L1"], + foulplay: ["9L1"], + beatup: ["9L1"], + fling: ["9L1"], + thief: ["9L1"], + doublekick: ["9L1"], + wildcharge: ["9L1"], + zenheadbutt: ["9L1"], + bodypress: ["9L1"], + defensecurl: ["9L1"], + growl: ["9L1"], + swagger: ["9L1"], + flatter: ["9L1"], + taunt: ["9L1"], + agility: ["9L1"], + cottonguard: ["9L1"], + cottonspore: ["9L1"], + partingshot: ["9L1"], + switcheroo: ["9L1"], + torment: ["9L1"], + nastyplot: ["9L1"], + }, + }, + caneine: { + learnset: { + playrough: ["9L1"], + stoneswipe: ["9L1"], + earthquake: ["9L1"], + rollout: ["9L1"], + metalclaw: ["9L1"], + crushclaw: ["9L1"], + bulldoze: ["9L1"], + bodypress: ["9L1"], + hornleech: ["9L1"], + crunch: ["9L1"], + icefang: ["9L1"], + thunderfang: ["9L1"], + jawlock: ["9L1"], + uturn: ["9L1"], + sugarrush: ["9L1"], + painsplit: ["9L1"], + stealthrock: ["9L1"], + guardsplit: ["9L1"], + curse: ["9L1"], + rockpolish: ["9L1"], + howl: ["9L1"], + helpinghand: ["9L1"], + roar: ["9L1"], + }, + }, + picktreebel: { + learnset: { + acid: ["9L1"], + acidspray: ["9L1"], + bodyslam: ["9L1"], + bugbite: ["9L1"], + bulletseed: ["9L1"], + clearsmog: ["9L1"], + encore: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + facade: ["9L1"], + gastroacid: ["9L1"], + gigadrain: ["9L1"], + gigaimpact: ["9L1"], + grassknot: ["9L1"], + grassyglide: ["9L1"], + grassyterrain: ["9L1"], + growth: ["9L1"], + hyperbeam: ["9L1"], + ingrain: ["9L1"], + knockoff: ["9L1"], + leafblade: ["9L1"], + leafstorm: ["9L1"], + leechlife: ["9L1"], + lunge: ["9L1"], + magicalleaf: ["9L1"], + poisonjab: ["9L1"], + poisonpowder: ["9L1"], + pounce: ["9L1"], + powerwhip: ["9L1"], + protect: ["9L1"], + razorleaf: ["9L1"], + reflect: ["9L1"], + rest: ["9L1"], + scaryface: ["9L1"], + seedbomb: ["9L1"], + slam: ["9L1"], + sleeppowder: ["9L1"], + sleeptalk: ["9L1"], + sludgebomb: ["9L1"], + sludgewave: ["9L1"], + solarbeam: ["9L1"], + spitup: ["9L1"], + stockpile: ["9L1"], + strengthsap: ["9L1"], + stunspore: ["9L1"], + substitute: ["9L1"], + suckerpunch: ["9L1"], + sunnyday: ["9L1"], + swallow: ["9L1"], + sweetscent: ["9L1"], + swift: ["9L1"], + swordsdance: ["9L1"], + synthesis: ["9L1"], + terablast: ["9L1"], + thief: ["9L1"], + tickle: ["9L1"], + toxic: ["9L1"], + trailblaze: ["9L1"], + venoshock: ["9L1"], + vinewhip: ["9L1"], + weatherball: ["9L1"], + worryseed: ["9L1"], + wrap: ["9L1"], + meteorbeam: ["9L1"], + powergem: ["9L1"], + ancientpower: ["9L1"], + ivycudgel: ["9L1"], + stoneedge: ["9L1"], + rockslide: ["9L1"], + rockblast: ["9L1"], + accelerock: ["9L1"], + rockpolish: ["9L1"], + stealthrock: ["9L1"], + sandstorm: ["9L1"], + }, + }, + twinklingshade: { + learnset: { + airslash: ["9L1"], + bounce: ["9L1"], + darkpulse: ["9L1"], + dualwingbeat: ["9L1"], + foulplay: ["9L1"], + hurricane: ["9L1"], + knockoff: ["9L1"], + snarl: ["9L1"], + throatchop: ["9L1"], + cosmicpower: ["9L1"], + darkvoid: ["9L1"], + defog: ["9L1"], + disable: ["9L1"], + encore: ["9L1"], + followme: ["9L1"], + haze: ["9L1"], + healingwish: ["9L1"], + helpinghand: ["9L1"], + lunardance: ["9L1"], + memento: ["9L1"], + moonlight: ["9L1"], + switcheroo: ["9L1"], + tailwind: ["9L1"], + teleport: ["9L1"], + thunderwave: ["9L1"], + wish: ["9L1"], + dazzlinggleam: ["9L1"], + extrasensory: ["9L1"], + flashcannon: ["9L1"], + icywind: ["9L1"], + moonblast: ["9L1"], + nightshade: ["9L1"], + shadowball: ["9L1"], + thunderbolt: ["9L1"], + aircutter: ["9L1"], + astonish: ["9L1"], + brutalswing: ["9L1"], + captivate: ["9L1"], + confusion: ["9L1"], + dreameater: ["9L1"], + embargo: ["9L1"], + fairywind: ["9L1"], + feintattack: ["9L1"], + flash: ["9L1"], + fling: ["9L1"], + fly: ["9L1"], + grudge: ["9L1"], + gust: ["9L1"], + lashout: ["9L1"], + lifedew: ["9L1"], + lightscreen: ["9L1"], + lunarblessing: ["9L1"], + nightmare: ["9L1"], + ominouswind: ["9L1"], + payback: ["9L1"], + psybeam: ["9L1"], + psychoshift: ["9L1"], + punishment: ["9L1"], + razorwind: ["9L1"], + roleplay: ["9L1"], + screech: ["9L1"], + sharpen: ["9L1"], + snatch: ["9L1"], + twister: ["9L1"], + wingattack: ["9L1"], + }, + }, + irontwilight: { + learnset: { + waningmoon: ["9L1"], + psychic: ["9L1"], + darkpulse: ["9L1"], + moonblast: ["9L1"], + thunderbolt: ["9L1"], + icywind: ["9L1"], + psyshock: ["9L1"], + flashcannon: ["9L1"], + focusblast: ["9L1"], + aurasphere: ["9L1"], + steelbeam: ["9L1"], + lunardance: ["9L1"], + calmmind: ["9L1"], + guardsplit: ["9L1"], + allyswitch: ["9L1"], + }, + }, + faerwork: { + learnset: { + fireworkshot: ["9L1"], + flamethrower: ["9L1"], + fireblast: ["9L1"], + dazzlinggleam: ["9L1"], + shadowball: ["9L1"], + powergem: ["9L1"], + energyball: ["9L1"], + nastyplot: ["9L1"], + encore: ["9L1"], + willowisp: ["9L1"], + flareblitz: ["9L1"], + flamecharge: ["9L1"], + heatwave: ["9L1"], + wildcharge: ["9L1"], + drainingkiss: ["9L1"], + hypervoice: ["9L1"], + playrough: ["9L1"], + trailblaze: ["9L1"], + zenheadbutt: ["9L1"], + mistyexplosion: ["9L1"], + mistyterrain: ["9L1"], + sunnyday: ["9L1"], + snowscape: ["9L1"], + safeguard: ["9L1"], + solarbeam: ["9L1"], + temperflare: ["9L1"], + fairywind: ["9L1"], + ember: ["9L1"], + flash: ["9L1"], + charm: ["9L1"], + confide: ["9L1"], + swift: ["9L1"], + protect: ["9L1"], + endure: ["9L1"], + substitute: ["9L1"], + rest: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + takedown: ["9L1"], + terablast: ["9L1"], + facade: ["9L1"], + attract: ["9L1"], + gigaimpact: ["9L1"], + hyperbeam: ["9L1"], + fling: ["9L1"], + focusenergy: ["9L1"], + tackle: ["9L1"], + uproar: ["9L1"], + psychup: ["9L1"], + workup: ["9L1"], + celebrate: ["9L1"], + present: ["9L1"], + happyhour: ["9L1"], + }, + }, + antaron: { + learnset: { + amnesia: ["9L1"], + attract: ["9L1"], + blizzard: ["9L1"], + block: ["9L1"], + breakingswipe: ["9L1"], + bulldoze: ["9L1"], + calmmind: ["9L1"], + confide: ["9L1"], + defog: ["9L1"], + doubleteam: ["9L1"], + dracometeor: ["9L1"], + dragonbreath: ["9L1"], + dragonclaw: ["9L1"], + dragondance: ["9L1"], + dragonpulse: ["9L1"], + dragonrage: ["9L1"], + dragonrush: ["9L1"], + dragontail: ["9L1"], + earthquake: ["9L1"], + echoedvoice: ["9L1"], + endeavor: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + extrasensory: ["9L1"], + facade: ["9L1"], + fireblast: ["9L1"], + flamethrower: ["9L1"], + fling: ["9L1"], + fly: ["9L1"], + focusblast: ["9L1"], + frustration: ["9L1"], + gigaimpact: ["9L1"], + glare: ["9L1"], + grassknot: ["9L1"], + heatwave: ["9L1"], + helpinghand: ["9L1"], + hiddenpower: ["9L1"], + hurricane: ["9L1"], + hydropump: ["9L1"], + hyperbeam: ["9L1"], + hypervoice: ["9L1"], + icebeam: ["9L1"], + icywind: ["9L1"], + lashout: ["9L1"], + lightscreen: ["9L1"], + mist: ["9L1"], + naturalgift: ["9L1"], + naturepower: ["9L1"], + outrage: ["9L1"], + playnice: ["9L1"], + playrough: ["9L1"], + protect: ["9L1"], + psychup: ["9L1"], + raindance: ["9L1"], + razorwind: ["9L1"], + rest: ["9L1"], + return: ["9L1"], + roar: ["9L1"], + rockslide: ["9L1"], + roost: ["9L1"], + round: ["9L1"], + safeguard: ["9L1"], + scaleshot: ["9L1"], + shadowball: ["9L1"], + shadowclaw: ["9L1"], + shockwave: ["9L1"], + signalbeam: ["9L1"], + sleeptalk: ["9L1"], + snarl: ["9L1"], + snore: ["9L1"], + solarbeam: ["9L1"], + steelwing: ["9L1"], + stompingtantrum: ["9L1"], + substitute: ["9L1"], + sunnyday: ["9L1"], + superpower: ["9L1"], + surf: ["9L1"], + swift: ["9L1"], + tailwind: ["9L1"], + thunder: ["9L1"], + thunderwave: ["9L1"], + thunderbolt: ["9L1"], + tickle: ["9L1"], + toxic: ["9L1"], + twister: ["9L1"], + uproar: ["9L1"], + waterpulse: ["9L1"], + workup: ["9L1"], + bodyslam: ["9L1"], + draconicshuffle: ["9L1"], + flamecharge: ["9L1"], + torchsong: ["9L1"], + airslash: ["9L1"], + wish: ["9L1"], + }, + }, + snowglob: { + learnset: { + icebeam: ["9L1"], + blizzard: ["9L1"], + grassknot: ["9L1"], + icywind: ["9L1"], + tailwind: ["9L1"], + futuresight: ["9L1"], + gigadrain: ["9L1"], + protect: ["9L1"], + helpinghand: ["9L1"], + storedpower: ["9L1"], + calmmind: ["9L1"], + agility: ["9L1"], + strengthsap: ["9L1"], + recover: ["9L1"], + rapidspin: ["9L1"], + uturn: ["9L1"], + stealthrock: ["9L1"], + }, + }, + dinjingle: { + learnset: { + flashcannon: ["9L1"], + alluringvoice: ["9L1"], + moonblast: ["9L1"], + voltswitch: ["9L1"], + psychicnoise: ["9L1"], + sparklingaria: ["9L1"], + dazzlinggleam: ["9L1"], + encore: ["9L1"], + stealthrock: ["9L1"], + healbell: ["9L1"], + wish: ["9L1"], + taunt: ["9L1"], + ironhead: ["9L1"], + spiritbreak: ["9L1"], + wildcharge: ["9L1"], + drainingkiss: ["9L1"], + hypervoice: ["9L1"], + playrough: ["9L1"], + zenheadbutt: ["9L1"], + mistyexplosion: ["9L1"], + mistyterrain: ["9L1"], + snowscape: ["9L1"], + safeguard: ["9L1"], + sonicboom: ["9L1"], + metalsound: ["9L1"], + irondefense: ["9L1"], + heavyslam: ["9L1"], + gyroball: ["9L1"], + fairywind: ["9L1"], + disarmingvoice: ["9L1"], + charm: ["9L1"], + confide: ["9L1"], + swift: ["9L1"], + protect: ["9L1"], + endure: ["9L1"], + substitute: ["9L1"], + rest: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + takedown: ["9L1"], + terablast: ["9L1"], + facade: ["9L1"], + attract: ["9L1"], + gigaimpact: ["9L1"], + hyperbeam: ["9L1"], + fling: ["9L1"], + focusenergy: ["9L1"], + tackle: ["9L1"], + uproar: ["9L1"], + psychup: ["9L1"], + workup: ["9L1"], + celebrate: ["9L1"], + present: ["9L1"], + happyhour: ["9L1"], + }, + }, + guywithsweater: { + learnset: { + judgement: ["9L1"], + doubleedge: ["9L1"], + playrough: ["9L1"], + spiritbreak: ["9L1"], + flareblitz: ["9L1"], + icespinner: ["9L1"], + knockoff: ["9L1"], + rapidspin: ["9L1"], + moonblast: ["9L1"], + dazzlinggleam: ["9L1"], + wish: ["9L1"], + drainingkiss: ["9L1"], + hypervoice: ["9L1"], + endeavor: ["9L1"], + steelroller: ["9L1"], + mistyexplosion: ["9L1"], + mistyterrain: ["9L1"], + snowscape: ["9L1"], + safeguard: ["9L1"], + fairywind: ["9L1"], + disarmingvoice: ["9L1"], + doubleslap: ["9L1"], + headbutt: ["9L1"], + pound: ["9L1"], + retaliate: ["9L1"], + charm: ["9L1"], + confide: ["9L1"], + swift: ["9L1"], + protect: ["9L1"], + endure: ["9L1"], + substitute: ["9L1"], + rest: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + takedown: ["9L1"], + terablast: ["9L1"], + facade: ["9L1"], + bodyslam: ["9L1"], + attract: ["9L1"], + gigaimpact: ["9L1"], + hyperbeam: ["9L1"], + fling: ["9L1"], + focusenergy: ["9L1"], + tackle: ["9L1"], + uproar: ["9L1"], + psychup: ["9L1"], + workup: ["9L1"], + celebrate: ["9L1"], + present: ["9L1"], + happyhour: ["9L1"], + }, + }, + gristletoe: { + learnset: { + sludgebomb: ["9L1"], + sludgewave: ["9L1"], + acid: ["9L1"], + acidspray: ["9L1"], + venoshock: ["9L1"], + darkpulse: ["9L1"], + energyball: ["9L1"], + gigadrain: ["9L1"], + megadrain: ["9L1"], + absorb: ["9L1"], + gunkshot: ["9L1"], + poisonjab: ["9L1"], + poisonfang: ["9L1"], + crunch: ["9L1"], + bite: ["9L1"], + suckerpunch: ["9L1"], + foulplay: ["9L1"], + beatup: ["9L1"], + powertrip: ["9L1"], + knockoff: ["9L1"], + lashout: ["9L1"], + seedbomb: ["9L1"], + bulletseed: ["9L1"], + powerwhip: ["9L1"], + pounce: ["9L1"], + present: ["9L1"], + toxic: ["9L1"], + toxicspikes: ["9L1"], + strengthsap: ["9L1"], + nastyplot: ["9L1"], + banefulbunker: ["9L1"], + gastroacid: ["9L1"], + torment: ["9L1"], + encore: ["9L1"], + charm: ["9L1"], + tickle: ["9L1"], + leer: ["9L1"], + babydolleyes: ["9L1"], + grassyterrain: ["9L1"], + }, + }, + aegibashpolar: { + learnset: { + afteryou: ["9L1"], + attract: ["9L1"], + autotomize: ["9L1"], + block: ["9L1"], + brickbreak: ["9L1"], + brutalswing: ["9L1"], + closecombat: ["9L1"], + confide: ["9L1"], + doubleteam: ["9L1"], + endure: ["9L1"], + facade: ["9L1"], + falseswipe: ["9L1"], + flashcannon: ["9L1"], + frustration: ["9L1"], + gigaimpact: ["9L1"], + gyroball: ["9L1"], + headsmash: ["9L1"], + hiddenpower: ["9L1"], + hyperbeam: ["9L1"], + irondefense: ["9L1"], + ironhead: ["9L1"], + kingsshield: ["9L1"], + laserfocus: ["9L1"], + magnetrise: ["9L1"], + metalsound: ["9L1"], + powertrick: ["9L1"], + protect: ["9L1"], + pursuit: ["9L1"], + raindance: ["9L1"], + reflect: ["9L1"], + rest: ["9L1"], + retaliate: ["9L1"], + return: ["9L1"], + reversal: ["9L1"], + rockslide: ["9L1"], + rocksmash: ["9L1"], + round: ["9L1"], + screech: ["9L1"], + secretpower: ["9L1"], + shockwave: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + steelbeam: ["9L1"], + substitute: ["9L1"], + sunnyday: ["9L1"], + swagger: ["9L1"], + swordsdance: ["9L1"], + tackle: ["9L1"], + toxic: ["9L1"], + wideguard: ["9L1"], + triplestaffbash: ["9L1"], + zapcannon: ["9L1"], + thunder: ["9L1"], + thunderbolt: ["9L1"], + discharge: ["9L1"], + voltswitch: ["9L1"], + paraboliccharge: ["9L1"], + chargebeam: ["9L1"], + icebeam: ["9L1"], + blizzard: ["9L1"], + aurorabeam: ["9L1"], + bodyslam: ["9L1"], + magnetbomb: ["9L1"], + wildcharge: ["9L1"], + supercellslam: ["9L1"], + spark: ["9L1"], + icehammer: ["9L1"], + iceshard: ["9L1"], + thunderwave: ["9L1"], + magneticflux: ["9L1"], + electricterrain: ["9L1"], + charge: ["9L1"], + snowscape: ["9L1"], + auroraveil: ["9L1"], + mist: ["9L1"], + }, + }, + gingermason: { + learnset: { + acidarmor: ["9L1"], + alluringvoice: ["9L1"], + aromaticmist: ["9L1"], + attract: ["9L1"], + blizzard: ["9L1"], + brickbreak: ["9L1"], + bulkup: ["9L1"], + bulldoze: ["9L1"], + bulletpunch: ["9L1"], + burningjealousy: ["9L1"], + circlethrow: ["9L1"], + decorate: ["9L1"], + dig: ["9L1"], + drainpunch: ["9L1"], + drainingkiss: ["9L1"], + earthpower: ["9L1"], + earthquake: ["9L1"], + ember: ["9L1"], + endeavor: ["9L1"], + facade: ["9L1"], + fireblast: ["9L1"], + firepunch: ["9L1"], + firespin: ["9L1"], + flamecharge: ["9L1"], + flamethrower: ["9L1"], + flareblitz: ["9L1"], + forcepalm: ["9L1"], + gigaimpact: ["9L1"], + heatcrash: ["9L1"], + heatwave: ["9L1"], + highhorsepower: ["9L1"], + hyperbeam: ["9L1"], + lick: ["9L1"], + lowkick: ["9L1"], + machpunch: ["9L1"], + milkdrink: ["9L1"], + mistyexplosion: ["9L1"], + mistyterrain: ["9L1"], + moonblast: ["9L1"], + morningsun: ["9L1"], + mudshot: ["9L1"], + nastyplot: ["9L1"], + overheat: ["9L1"], + playrough: ["9L1"], + powdersnow: ["9L1"], + protect: ["9L1"], + rest: ["9L1"], + sandtomb: ["9L1"], + scorchingsands: ["9L1"], + sleeptalk: ["9L1"], + sludgebomb: ["9L1"], + snowscape: ["9L1"], + solarbeam: ["9L1"], + stealthrock: ["9L1"], + stompingtantrum: ["9L1"], + substitute: ["9L1"], + sunnyday: ["9L1"], + superpower: ["9L1"], + sweetscent: ["9L1"], + taunt: ["9L1"], + temperflare: ["9L1"], + terablast: ["9L1"], + toxic: ["9L1"], + trailblaze: ["9L1"], + willowisp: ["9L1"], + }, + }, + swadloonfestive: { + learnset: { + batonpass: ["9L1"], + bugbite: ["9L1"], + bugbuzz: ["9L1"], + charm: ["9L1"], + electroweb: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + facade: ["9L1"], + flail: ["9L1"], + gigadrain: ["9L1"], + grassknot: ["9L1"], + grassyglide: ["9L1"], + grassyterrain: ["9L1"], + irondefense: ["9L1"], + lightscreen: ["9L1"], + lunge: ["9L1"], + magicalleaf: ["9L1"], + pounce: ["9L1"], + protect: ["9L1"], + raindance: ["9L1"], + razorleaf: ["9L1"], + rest: ["9L1"], + screech: ["9L1"], + seedbomb: ["9L1"], + skittersmack: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + solarbeam: ["9L1"], + stickyweb: ["9L1"], + stringshot: ["9L1"], + strugglebug: ["9L1"], + substitute: ["9L1"], + sunnyday: ["9L1"], + switcheroo: ["9L1"], + synthesis: ["9L1"], + tackle: ["9L1"], + takedown: ["9L1"], + terablast: ["9L1"], + trailblaze: ["9L1"], + worryseed: ["9L1"], + icebeam: ["9L1"], + uturn: ["9L1"], + icespinner: ["9L1"], + wrap: ["9L1"], + leechseed: ["9L1"], + snowscape: ["9L1"], + }, + }, + leavannyfestive: { + learnset: { + agility: ["9L1"], + airslash: ["9L1"], + batonpass: ["9L1"], + bugbite: ["9L1"], + bugbuzz: ["9L1"], + bulletseed: ["9L1"], + calmmind: ["9L1"], + charm: ["9L1"], + electroweb: ["9L1"], + endure: ["9L1"], + energyball: ["9L1"], + entrainment: ["9L1"], + facade: ["9L1"], + falseswipe: ["9L1"], + fellstinger: ["9L1"], + flail: ["9L1"], + gigadrain: ["9L1"], + gigaimpact: ["9L1"], + grassknot: ["9L1"], + grassyglide: ["9L1"], + grassyterrain: ["9L1"], + helpinghand: ["9L1"], + hyperbeam: ["9L1"], + irondefense: ["9L1"], + knockoff: ["9L1"], + leafblade: ["9L1"], + leafstorm: ["9L1"], + lightscreen: ["9L1"], + lowkick: ["9L1"], + lunge: ["9L1"], + magicalleaf: ["9L1"], + poisonjab: ["9L1"], + pollenpuff: ["9L1"], + pounce: ["9L1"], + protect: ["9L1"], + raindance: ["9L1"], + razorleaf: ["9L1"], + reflect: ["9L1"], + rest: ["9L1"], + screech: ["9L1"], + seedbomb: ["9L1"], + shadowclaw: ["9L1"], + skittersmack: ["9L1"], + slash: ["9L1"], + sleeptalk: ["9L1"], + snore: ["9L1"], + solarbeam: ["9L1"], + stickyweb: ["9L1"], + stringshot: ["9L1"], + strugglebug: ["9L1"], + substitute: ["9L1"], + sunnyday: ["9L1"], + switcheroo: ["9L1"], + swordsdance: ["9L1"], + synthesis: ["9L1"], + tackle: ["9L1"], + takedown: ["9L1"], + terablast: ["9L1"], + throatchop: ["9L1"], + trailblaze: ["9L1"], + tripleaxel: ["9L1"], + worryseed: ["9L1"], + xscissor: ["9L1"], + holidaypreparation: ["9L1"], + icespinner: ["9L1"], + drillrun: ["9L1"], + honeclaws: ["9L1"], + snowscape: ["9L1"], + sweetkiss: ["9L1"], + wrap: ["9L1"], + }, + }, + mausholddysfunctional: { + learnset: { + aerialace: ["9L1"], + beatup: ["9L1"], + bulletseed: ["9L1"], + flamecharge: ["9L1"], + lunge: ["9L1"], + playrough: ["9L1"], + populationbomb: ["9L1"], + poweruppunch: ["9L1"], + rockblast: ["9L1"], + rocktomb: ["9L1"], + trailblaze: ["9L1"], + uturn: ["9L1"], + chillingwater: ["9L1"], + terablast: ["9L1"], + protect: ["9L1"], + substitute: ["9L1"], + thunderwave: ["9L1"], + tidyup: ["9L1"], + }, + }, +}; diff --git a/data/mods/ccapm2025/moves.ts b/data/mods/ccapm2025/moves.ts new file mode 100644 index 0000000000..568193e4d8 --- /dev/null +++ b/data/mods/ccapm2025/moves.ts @@ -0,0 +1,2772 @@ +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { + // Changed Moves + acupressure: { + inherit: true, + onHit(target) { + if (target.species.name === "Regigigas" && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (!target.m.stats) { + const allStats: BoostID[] = []; + let stat: BoostID; + for (stat in target.boosts) { + allStats.push(stat); + } + + target.m.stats = allStats; + target.m.stats.pop(); + target.m.stats.pop(); + this.prng.shuffle(target.m.stats); + } + + if (target.m.stats.length) { + const randomStat = target.m.stats.pop(); + const boost: SparseBoostsTable = {}; + boost[randomStat as BoostID] = 2; + this.boost(boost); + } else { + return false; + } + + if (target.m.stats.length === 0) + target.formeChange('Regigigas-Colossal', null, true); + } else { + const stats: BoostID[] = []; + let stat: BoostID; + for (stat in target.boosts) { + if (target.boosts[stat] < 6) { + stats.push(stat); + } + } + if (stats.length) { + const randomStat = this.sample(stats); + const boost: SparseBoostsTable = {}; + boost[randomStat] = 2; + this.boost(boost); + } else { + return false; + } + } + }, + }, + aromatherapy: { + inherit: true, + /* beforeMoveCallback(pokemon) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (pokemon.species.name === 'Shaymin') { + pokemon.formeChange('Shaymin-Sky', null, true); + pokemon.setAbility('serenegrace', pokemon); + return true; + } + }, */ + onHit(target, source, move) { + this.add('-activate', source, 'move: Aromatherapy'); + let success = false; + const allies = [...target.side.pokemon, ...target.side.allySide?.pokemon || []]; + for (const ally of allies) { + if (ally !== source && !this.suppressingAbility(ally)) { + if (ally.hasAbility('sapsipper')) { + this.add('-immune', ally, '[from] ability: Sap Sipper'); + continue; + } + if (ally.hasAbility('goodasgold')) { + this.add('-immune', ally, '[from] ability: Good as Gold'); + continue; + } + if (ally.volatiles['substitute'] && !move.infiltrates) continue; + } + if ((ally as any).cureStatus(false, source)) success = true; + } + return success; + }, + }, + diamondstorm: { + inherit: true, + onModifyMove(move, source) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + + const item = source.getItem(); + if (!item?.isGem) return; + + move.type = item.name.split(' ')[0]; + + if (source.ability !== "geminfusion" || !move) return; + + move.onEffectiveness = + function (this: Battle, typeMod: number, target: Pokemon | null, type: string, ActiveMove) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }; + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + + const item = pokemon.getItem(); + if (pokemon.species.id === 'diancie' && !pokemon.transformed && item?.isGem) { + pokemon.formeChange('Diancie-Infused', this.effect, true, '0', '[msg]'); + } + }, + }, + diamondstormbug: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Bug)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Bug", + contestType: "Beautiful", + }, + diamondstormdark: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Dark)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Dark", + contestType: "Beautiful", + }, + diamondstormdragon: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Dragon)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Dragon", + contestType: "Beautiful", + }, + diamondstormelectric: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Electric)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Electric", + contestType: "Beautiful", + }, + diamondstormfairy: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Fairy)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Fairy", + contestType: "Beautiful", + }, + diamondstormfighting: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Fighting)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Fighting", + contestType: "Beautiful", + }, + diamondstormfire: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Fire)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Fire", + contestType: "Beautiful", + }, + diamondstormflying: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Flying)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Flying", + contestType: "Beautiful", + }, + diamondstormghost: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Ghost)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Ghost", + contestType: "Beautiful", + }, + diamondstormgrass: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Grass)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Grass", + contestType: "Beautiful", + }, + diamondstormground: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Ground)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Ground", + contestType: "Beautiful", + }, + diamondstormice: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Ice)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Ice", + contestType: "Beautiful", + }, + diamondstormnormal: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Normal)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Normal", + contestType: "Beautiful", + }, + diamondstormpoison: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Poison)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Poison", + contestType: "Beautiful", + }, + diamondstormpsychic: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Psychic)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Psychic", + contestType: "Beautiful", + }, + diamondstormrock: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Rock)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Rock", + contestType: "Beautiful", + }, + diamondstormsteel: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Steel)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Steel", + contestType: "Beautiful", + }, + diamondstormwater: { + num: 591, + accuracy: 95, + basePower: 100, + category: "Physical", + realMove: "Diamond Storm", + name: "Diamond Storm (Water)", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + self: { + chance: 50, + boosts: { + def: 2, + }, + }, + secondary: { + // Sheer Force negates the self even though it is not secondary + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Rock', type); + }, + target: "allAdjacentFoes", + type: "Water", + contestType: "Beautiful", + }, + explosion: { + inherit: true, + onAfterMove(pokemon, source, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (pokemon.species.name === "Electrode" && pokemon.fainted) { + this.add('-message', `Shakite escaped from its Pokéball!`); + + const shakite: PokemonSet = { + name: "Shakite", + species: "Shakite", + item: pokemon.set.item, + ability: "Aerilate", + moves: pokemon.set.moves, + nature: pokemon.set.nature, + gender: ['M', 'F'][this.random(2)], + happiness: this.random(256), + teraType: pokemon.set.teraType, + evs: pokemon.set.evs, + ivs: pokemon.set.ivs, + level: pokemon.set.level, + shiny: this.random(4096) === 0, + }; + + const newPoke = pokemon.side.addPokemon(shakite)!; + this.add('poke', newPoke.side.id, newPoke.details, ''); + this.actions.switchIn(newPoke, 0, null, false); + } + }, + }, + finalgambit: { + inherit: true, + onAfterMove(pokemon, source, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (pokemon.species.name === "Electrode" && pokemon.fainted) { + this.add('-message', `Shakite escaped from its Pokéball!`); + + const shakite: PokemonSet = { + name: "Shakite", + species: "Shakite", + item: pokemon.set.item, + ability: "Aerilate", + moves: pokemon.set.moves, + nature: pokemon.set.nature, + gender: ['M', 'F'][this.random(2)], + happiness: this.random(256), + teraType: pokemon.set.teraType, + evs: pokemon.set.evs, + ivs: pokemon.set.ivs, + level: pokemon.set.level, + shiny: this.random(4096) === 0, + }; + + const newPoke = pokemon.side.addPokemon(shakite)!; + this.add('poke', newPoke.side.id, newPoke.details, ''); + this.actions.switchIn(newPoke, 0, null, false); + } + }, + }, + gmaxsweetness: { + inherit: true, + self: { + onHit(source) { + for (const ally of source.side.pokemon) { + (ally as any).cureStatus(false, source); + } + }, + }, + }, + healbell: { + inherit: true, + onHit(target, source) { + this.add('-activate', source, 'move: Heal Bell'); + let success = false; + const allies = [...target.side.pokemon, ...target.side.allySide?.pokemon || []]; + for (const ally of allies) { + if (ally !== source && !this.suppressingAbility(ally)) { + if (ally.hasAbility('soundproof')) { + this.add('-immune', ally, '[from] ability: Soundproof'); + continue; + } + if (ally.hasAbility('goodasgold')) { + this.add('-immune', ally, '[from] ability: Good as Gold'); + continue; + } + } + if ((ally as any).cureStatus(false, source)) success = true; + } + return success; + }, + }, + junglehealing: { + inherit: true, + onHit(pokemon) { + const success = !!this.heal(this.modify(pokemon.maxhp, 0.25)); + return ((pokemon as any).cureStatus(false, pokemon)) || success; + }, + }, + healingwish: { + inherit: true, + onAfterMove(pokemon, source, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (pokemon.species.name === "Electrode" && pokemon.fainted) { + this.add('-message', `Shakite escaped from its Pokéball!`); + + const shakite: PokemonSet = { + name: "Shakite", + species: "Shakite", + item: pokemon.set.item, + ability: "Aerilate", + moves: pokemon.set.moves, + nature: pokemon.set.nature, + gender: ['M', 'F'][this.random(2)], + happiness: this.random(256), + teraType: pokemon.set.teraType, + evs: pokemon.set.evs, + ivs: pokemon.set.ivs, + level: pokemon.set.level, + shiny: this.random(4096) === 0, + }; + + const newPoke = pokemon.side.addPokemon(shakite)!; + this.add('poke', newPoke.side.id, newPoke.details, ''); + this.actions.switchIn(newPoke, 0, null, false); + } + }, + }, + holdhands: { + inherit: true, + isNonstandard: undefined, + onAfterMove(source, target, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (source.baseSpecies.name === 'Jirachi') return; + if (!(source.side as any).holdHandsUsers) (source.side as any).holdHandsUsers = [source.baseSpecies.name]; + else if (!(source.side as any).holdHandsUsers.includes(source.baseSpecies.name)) (source.side as any) + .holdHandsUsers.push(source.baseSpecies.name); + }, + shortDesc: "If used twice, transforms Jirachi.", + pp: 1, + }, + lunarblessing: { + inherit: true, + onHit(pokemon) { + const success = !!this.heal(this.modify(pokemon.maxhp, 0.25)); + return (pokemon as any).cureStatus(false, pokemon) || success; + }, + }, + lunardance: { + inherit: true, + onAfterMove(pokemon, source, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (pokemon.species.name === "Electrode" && pokemon.fainted) { + this.add('-message', `Shakite escaped from its Pokéball!`); + + const shakite: PokemonSet = { + name: "Shakite", + species: "Shakite", + item: pokemon.set.item, + ability: "Aerilate", + moves: pokemon.set.moves, + nature: pokemon.set.nature, + gender: ['M', 'F'][this.random(2)], + happiness: this.random(256), + teraType: pokemon.set.teraType, + evs: pokemon.set.evs, + ivs: pokemon.set.ivs, + level: pokemon.set.level, + shiny: this.random(4096) === 0, + }; + + const newPoke = pokemon.side.addPokemon(shakite)!; + this.add('poke', newPoke.side.id, newPoke.details, ''); + this.actions.switchIn(newPoke, 0, null, false); + } + }, + }, + memento: { + inherit: true, + onAfterMove(pokemon, source, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (pokemon.species.name === "Electrode" && pokemon.fainted) { + this.add('-message', `Shakite escaped from its Pokéball!`); + + const shakite: PokemonSet = { + name: "Shakite", + species: "Shakite", + item: pokemon.set.item, + ability: "Aerilate", + moves: pokemon.set.moves, + nature: pokemon.set.nature, + gender: ['M', 'F'][this.random(2)], + happiness: this.random(256), + teraType: pokemon.set.teraType, + evs: pokemon.set.evs, + ivs: pokemon.set.ivs, + level: pokemon.set.level, + shiny: this.random(4096) === 0, + }; + + const newPoke = pokemon.side.addPokemon(shakite)!; + this.add('poke', newPoke.side.id, newPoke.details, ''); + this.actions.switchIn(newPoke, 0, null, false); + } + }, + }, + mistyexplosion: { + inherit: true, + onAfterMove(pokemon, source, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (pokemon.species.name === "Electrode" && pokemon.fainted) { + this.add('-message', `Shakite escaped from its Pokéball!`); + + const shakite: PokemonSet = { + name: "Shakite", + species: "Shakite", + item: pokemon.set.item, + ability: "Aerilate", + moves: pokemon.set.moves, + nature: pokemon.set.nature, + gender: ['M', 'F'][this.random(2)], + happiness: this.random(256), + teraType: pokemon.set.teraType, + evs: pokemon.set.evs, + ivs: pokemon.set.ivs, + level: pokemon.set.level, + shiny: this.random(4096) === 0, + }; + + const newPoke = pokemon.side.addPokemon(shakite)!; + this.add('poke', newPoke.side.id, newPoke.details, ''); + this.actions.switchIn(newPoke, 0, null, false); + } + }, + }, + psychoshift: { + inherit: true, + self: { + onHit(pokemon) { + (pokemon as any).cureStatus(false, pokemon); + }, + }, + }, + purify: { + inherit: true, + onHit(target, source) { + if (!(target as any).cureStatus(false, source)) { + this.add('-fail', source); + this.attrLastMove('[still]'); + return this.NOT_FAIL; + } + this.heal(Math.ceil(source.maxhp * 0.5), source); + }, + }, + refresh: { + inherit: true, + onHit(pokemon) { + if (['', 'slp', 'frz'].includes(pokemon.status)) return false; + (pokemon as any).cureStatus(false, pokemon); + }, + }, + selfdestruct: { + inherit: true, + onAfterMove(pokemon, source, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (pokemon.species.name === "Electrode" && pokemon.fainted) { + this.add('-message', `Shakite escaped from its Pokéball!`); + + const shakite: PokemonSet = { + name: "Shakite", + species: "Shakite", + item: pokemon.set.item, + ability: "Aerilate", + moves: pokemon.set.moves, + nature: pokemon.set.nature, + gender: ['M', 'F'][this.random(2)], + happiness: this.random(256), + teraType: pokemon.set.teraType, + evs: pokemon.set.evs, + ivs: pokemon.set.ivs, + level: pokemon.set.level, + shiny: this.random(4096) === 0, + }; + + const newPoke = pokemon.side.addPokemon(shakite)!; + this.add('poke', newPoke.side.id, newPoke.details, ''); + this.actions.switchIn(newPoke, 0, null, false); + } + }, + }, + smellingsalts: { + inherit: true, + onHit(target, source, move) { + if (target.status === 'par') (target as any).cureStatus(false, source); + }, + }, + sparklingaria: { + inherit: true, + onAfterMove(source, target, move) { + if (source.fainted || !move.hitTargets || move.hasSheerForce) { + // make sure the volatiles are cleared + for (const pokemon of this.getAllActive()) delete pokemon.volatiles['sparklingaria']; + return; + } + const numberTargets = move.hitTargets.length; + for (const pokemon of move.hitTargets) { + // bypasses Shield Dust when hitting multiple targets + if (pokemon !== source && pokemon.isActive && (pokemon.removeVolatile('sparklingaria') || numberTargets > 1) && + pokemon.status === 'brn') { + (pokemon as any).cureStatus(false, source); + } + } + }, + }, + sparklyswirl: { + inherit: true, + self: { + onHit(pokemon, source, move) { + this.add('-activate', source, 'move: Aromatherapy'); + for (const ally of source.side.pokemon) { + if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { + continue; + } + (ally as any).cureStatus(false, source); + } + }, + }, + }, + stealthrock: { + inherit: true, + condition: { + // this is a side condition + onSideStart(side) { + this.add('-sidestart', side, 'move: Stealth Rock'); + }, + onSwitchIn(pokemon) { + if (pokemon.hasItem('heavydutyboots') || pokemon.hasItem('restorationcapsule')) return; + if (pokemon.hasAbility('moltencore')) return; + const source = this.effectState.source; + const type = source.ability === "geminfusion" && + source.getItem()?.isGem ? source.getItem().name.split(' ')[0] : this.dex.getActiveMove('stealthrock').type; + const typeMod = this.clampIntRange(pokemon.runEffectiveness(type), -6, 6); + this.damage(pokemon.maxhp * (2 ** typeMod) / 8); + }, + }, + }, + toxicspikes: { + inherit: true, + condition: { + // this is a side condition + onSideStart(side) { + this.add('-sidestart', side, 'move: Toxic Spikes'); + this.effectState.layers = 1; + }, + onSideRestart(side) { + if (this.effectState.layers >= 2) return false; + this.add('-sidestart', side, 'move: Toxic Spikes'); + this.effectState.layers++; + }, + onSwitchIn(pokemon) { + if (!pokemon.isGrounded()) return; + if (pokemon.hasType('Poison')) { + this.add('-sideend', pokemon.side, 'move: Toxic Spikes', `[of] ${pokemon}`); + pokemon.side.removeSideCondition('toxicspikes'); + } else if (pokemon.hasType('Steel') || pokemon.hasItem('heavydutyboots') || + pokemon.hasItem('restorationcapsule') || pokemon.hasAbility('moltencore')) { + // do nothing + } else if (this.effectState.layers >= 2) { + pokemon.trySetStatus('tox', pokemon.side.foe.active[0]); + } else { + pokemon.trySetStatus('psn', pokemon.side.foe.active[0]); + } + }, + }, + }, + spikes: { + inherit: true, + condition: { + // this is a side condition + onSideStart(side) { + this.add('-sidestart', side, 'Spikes'); + this.effectState.layers = 1; + }, + onSideRestart(side) { + if (this.effectState.layers >= 3) return false; + this.add('-sidestart', side, 'Spikes'); + this.effectState.layers++; + }, + onSwitchIn(pokemon) { + if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return; + if (pokemon.hasItem('restorationcapsule')) return; + if (pokemon.hasAbility('moltencore')) return; + const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 + this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24); + }, + }, + }, + stickyweb: { + inherit: true, + condition: { + onSideStart(side) { + this.add('-sidestart', side, 'move: Sticky Web'); + }, + onSwitchIn(pokemon) { + if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return; + if (pokemon.hasItem('restorationcapsule')) return; + if (pokemon.hasAbility('moltencore')) return; + this.add('-activate', pokemon, 'move: Sticky Web'); + this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb')); + }, + }, + }, + takeheart: { + inherit: true, + onHit(pokemon) { + const success = !!this.boost({ spa: 1, spd: 1 }); + return (pokemon as any).cureStatus(false, pokemon) || success; + }, + }, + uproar: { + inherit: true, + onTryHit(target, source, move) { + const activeTeam = target.side.activeTeam(); + const foeActiveTeam = target.side.foe.activeTeam(); + for (const [i, allyActive] of activeTeam.entries()) { + if (allyActive && allyActive.status === 'slp') (allyActive as any).cureStatus(false, source); + const foeActive = foeActiveTeam[i]; + if (foeActive && foeActive.status === 'slp') (foeActive as any).cureStatus(false, source); + } + }, + secondary: undefined, + target: "randomNormal", + type: "Normal", + contestType: "Cute", + }, + wakeupslap: { + inherit: true, + onHit(target, source, move) { + if (target.status === 'slp') (target as any).cureStatus(false, source); + }, + }, + worryseed: { + inherit: true, + onHit(target, source) { + const oldAbility = target.setAbility('insomnia'); + if (!oldAbility) return oldAbility as false | null; + if (target.status === 'slp') (target as any).cureStatus(false, source); + }, + /* beforeMoveCallback(pokemon) { + if (pokemon.species.name === 'Shaymin') { + pokemon.formeChange('Shaymin-Sky', null, true); + pokemon.setAbility('serenegrace', pokemon); + return true; + } + }, */ + }, + + // New Moves + primalpulse: { + accuracy: 100, + basePower: 90, + category: "Special", + name: "Primal Pulse", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Morning Sun', target); + this.add('-anim', source, 'Aura Sphere', target); + }, + onModifyType(move, pokemon) { + const types = pokemon.getTypes(); + let type = types[1]; + if (type === 'Bird') type = '???'; + if (type === '???' && types[0]) type = types[0]; + move.type = type; + }, + secondary: { + chance: 20, + volatileStatus: 'flinch', + }, + target: "normal", + type: "Rock", + contestType: "Beautiful", + shortDesc: "Type varies based on the user's secondary type. 20% flinch.", + }, + dragonscurse: { + accuracy: 100, + basePower: 60, + category: "Special", + name: "Dragon's Curse", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dragon Pulse', target); + this.add('-anim', source, 'Hex', target); + }, + secondary: { + chance: 100, + onHit(target) { + target.addVolatile('curse'); + }, + }, + target: "normal", + type: "Dragon", + contestType: "Clever", + shortDesc: "Curses the target.", + }, + gaslight: { + accuracy: 100, + basePower: 0, + category: "Status", + name: "Gaslight", + pp: 30, + priority: 0, + flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 }, + status: 'ber', + secondary: undefined, + target: "normal", + type: "Normal", + zMove: { boost: { spd: 1 } }, + contestType: "Tough", + }, + heartofoak: { + num: 1312, + accuracy: true, + basePower: 0, + category: "Status", + name: "Heart of Oak", + pp: 5, + priority: 0, + flags: { snatch: 1, distance: 1, metronome: 1 }, + onHit(target, source, move) { + this.add('-activate', source, 'move: Heart of Oak'); + let success = false; + const allies = [...target.side.pokemon, ...target.side.allySide?.pokemon || []]; + for (const ally of allies) { + if (ally !== source && !this.suppressingAbility(ally)) { + if (ally.hasAbility('sapsipper')) { + this.add('-immune', ally, '[from] ability: Sap Sipper'); + continue; + } + if (ally.hasAbility('goodasgold')) { + this.add('-immune', ally, '[from] ability: Good as Gold'); + continue; + } + if (ally.volatiles['substitute'] && !move.infiltrates) continue; + } + if (ally.cureStatus()) success = true; + if (ally.hp < ally.maxhp) ally.sethp(Math.min(ally.maxhp, ally.hp + source.maxhp / 8)); + } + return success; + }, + target: "allyTeam", + type: "Grass", + zMove: { effect: 'heal' }, + contestType: "Beautiful", + shortDesc: "Heals the user and its team by 1/8 of their max HP and cures their status conditions.", + }, + sixtongueemojis: { + accuracy: 100, + basePower: 100, + category: "Physical", + name: "sixtongueemojis", + pp: 10, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Lick', target); + this.add('-anim', source, 'Lick', target); + this.add('-anim', source, 'Lick', target); + this.add('-anim', source, 'Lick', target); + this.add('-anim', source, 'Lick', target); + this.add('-anim', source, 'Lick', target); + }, + beforeTurnCallback(pokemon) { + for (const side of this.sides) { + if (side.hasAlly(pokemon)) continue; + side.addSideCondition('sixtongueemojis', pokemon); + const data = side.getSideConditionData('sixtongueemojis'); + if (!data.sources) { + data.sources = []; + } + data.sources.push(pokemon); + } + }, + onModifyMove(move, source, target) { + if (target?.beingCalledBack || target?.switchFlag) move.accuracy = true; + }, + onTryHit(target, pokemon) { + target.side.removeSideCondition('sixtongueemojis'); + }, + condition: { + duration: 1, + onBeforeSwitchOut(pokemon) { + this.debug('sixtongueemojis start'); + let alreadyAdded = false; + pokemon.removeVolatile('destinybond'); + for (const source of this.effectState.sources) { + if (!source.isAdjacent(pokemon) || !this.queue.cancelMove(source) || !source.hp) continue; + if (!alreadyAdded) { + this.add('-activate', pokemon, 'move: sixtongueemojis'); + alreadyAdded = true; + } + // Run through each action in queue to check if the Pursuit user is supposed to Mega Evolve this turn. + // If it is, then Mega Evolve before moving. + if (source.canMegaEvo || source.canUltraBurst || source.canTerastallize) { + for (const [actionIndex, action] of this.queue.entries()) { + if (action.pokemon === source) { + if (action.choice === 'megaEvo') { + this.actions.runMegaEvo(source); + } else if (action.choice === 'terastallize') { + // Also a "forme" change that happens before moves, though only possible in NatDex + this.actions.terastallize(source); + } else { + continue; + } + this.queue.list.splice(actionIndex, 1); + break; + } + } + } + this.actions.runMove('sixtongueemojis', source, source.getLocOf(pokemon)); + } + }, + }, + secondary: undefined, + target: "normal", + type: "Normal", + contestType: "Clever", + shortDesc: "Hits foes before they switch out.", + }, + kaleidostorm: { + accuracy: 100, + basePower: 90, + category: "Physical", + name: "Kaleidostorm", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Diamond Storm', target); + }, + onModifyType(move, pokemon) { + const types = pokemon.getTypes(); + let type = types[0]; + if (type === 'Bird') type = '???'; + if (type === '???' && types[1]) type = types[1]; + move.type = type; + }, + secondary: undefined, + target: "normal", + type: "Normal", + contestType: "Beautiful", + shortDesc: "Type varies based on the user's primary type.", + }, + yinyangblast: { + accuracy: true, + basePower: 170, + category: "Special", + name: "Yin-Yang Blast", + pp: 1, + priority: 0, + flags: {}, + /* onTryMove() { + this.attrLastMove('[still]'); + }, */ + onPrepareHit(target, source) { + this.add('-anim', source, 'Inferno Overdrive', target); + this.add('-anim', source, 'Thunder Cage', target); + }, + onEffectiveness(typeMod, target, type) { + if (type === 'Water') return 1; + }, + isZ: "ultrasimiseariumz", + secondary: undefined, + target: "normal", + type: "Fire", + contestType: "Cool", + shortDesc: "Super effective on Water.", + }, + stackshield: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Stack Shield", + pp: 10, + priority: 4, + flags: { noassist: 1, failcopycat: 1 }, + stallingMove: true, + volatileStatus: 'stackshield', + onPrepareHit(pokemon) { + return !!this.queue.willAct() && this.runEvent('StallMove', pokemon); + }, + onHit(pokemon) { + pokemon.addVolatile('stall'); + }, + condition: { + duration: 1, + onStart(target) { + this.add('-singleturn', target, 'Protect'); + }, + onTryHitPriority: 3, + onTryHit(target, source, move) { + if (!move.flags['protect']) { + if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; + if (move.isZ || move.isMax) target.getMoveHitData(move).bypassProtect = true; + return; + } + if (move.smartTarget) { + move.smartTarget = false; + } else { + this.add('-activate', target, 'move: Protect'); + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + return this.NOT_FAIL; + }, + }, + secondary: undefined, + target: "self", + type: "Normal", + zMove: { effect: 'clearnegativeboost' }, + contestType: "Cute", + shortDesc: "Protects the user and flips its offenses and defenses.", + }, + ribbonshift: { + accuracy: 100, + basePower: 100, + category: "Physical", + name: "Ribbon Shift", + pp: 5, + flags: { protect: 1, mirror: 1, metronome: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Swift', target); + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Psychic', type); + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (pokemon.baseSpecies.baseSpecies === 'Sylveon' && !pokemon.transformed) { + const sylveForme = pokemon.species.id === 'sylveonlumineon' ? '' : '-Lumineon'; + pokemon.formeChange('Sylveon' + sylveForme, this.effect, false, '0', '[msg]'); + } + }, + onTry(source) { + if (source.species.name === 'Sylveon') { + return; + } + this.hint("Only a Pokemon whose form is Sylveon-Base can use this move."); + if (source.species.name === 'Sylveon-Lumineon') { + this.attrLastMove('[still]'); + this.add('-fail', source, 'move: Ribbon Shift', '[forme]'); + return null; + } + this.attrLastMove('[still]'); + this.add('-fail', source, 'move: Ribbon Shift'); + return null; + }, + priority: 0, + secondary: undefined, + target: "normal", + type: "Fairy", + zMove: { basePower: 170 }, + contestType: "Cute", + shortDesc: "Sylveon-Base: Combined type effectiveness with Psychic. Sylveon transforms.", + }, + // generationalevolution: { + // accuracy: 100, + // basePower: 0, + // damage: 40, + // category: "Physical", + // name: "Generational Evolution", + // pp: 30, + // priority: 0, + // flags: { protect: 1, mirror: 1, metronome: 1 }, + // onTryMove() { + // this.attrLastMove('[still]'); + // }, + // onPrepareHit(target, source) { + // this.add('-anim', source, 'Dragon Rage', target); + // }, + // onHit(target, pokemon, move) { + // if (this.effectState.landoI) return; + // if (pokemon.baseSpecies.baseSpecies === 'Landorus' && pokemon.transformed) { + // move.willChangeForme = true; + // this.effectState.landoT = false; + // this.effectState.landoI = true; + // } + // }, + // onAfterMoveSecondarySelf(pokemon, target, move) { + // if (move.willChangeForme) { + // const lF = pokemon.species.id === 'landorustherianancestral' ? 'Landorus-Therian' : 'Landorus'; + // pokemon.formeChange(lF, this.effect, true); + // if (pokemon.species.name === 'Landorus-Therian') { + // pokemon.setAbility('intimidate', pokemon); + // } else if (pokemon.species.name === 'Landorus') { + // pokemon.setAbility('sheerforce', pokemon); + // } + // } + // }, + // secondary: { + // chance: 100, + // self: { + // boosts: { + // atk: 2, + // }, + // }, + // }, + // target: "normal", + // type: "Normal", + // contestType: "Cool", + // desc: "Always does 40 damage. Boosts the user's Attack by 2 stages. Landorus transforms.", + // shortDesc: "Always does 40 damage. Boosts the user's Attack by 2 stages. Landorus transforms.", + // }, + generationaldeevolution: { + accuracy: 100, + basePower: 0, + damage: 40, + category: "Special", + name: "Generational De-Evolution", + pp: 30, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dragon Rage', target); + }, + onHit(target, pokemon, move) { + if (pokemon.species.id === 'landorus') this.boost({ spa: 2 }, pokemon); + else if (pokemon.species.id === 'landorustherian') this.boost({ atk: 2 }, pokemon); + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (pokemon.baseSpecies.baseSpecies === 'Landorus' && pokemon.species.name !== 'Landorus-Ancestral') { + pokemon.formeChange('Landorus-Ancestral', this.effect, true); + } + }, + target: "normal", + type: "Normal", + contestType: "Cool", + shortDesc: "Always does 40 damage. Boosts Atk/SpA by 2 based on form. Landorus transforms.", + }, + soulboundslash: { + accuracy: 100, + basePower: 90, + category: "Physical", + name: "Soulbound Slash", + pp: 10, + priority: 0, + flags: { slicing: 1, protect: 1, mirror: 1, metronome: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Night Slash', target); + if (source.types.join() === source.species.types.join()) { + const randomType = target.types[this.random(target.types.length)]; + if (source.setType(randomType)) this.add('-start', source, 'typechange', randomType); + } + }, + onTryImmunity(target, source) { + return target.hasType(source.getTypes()); + }, + onEffectiveness(typeMod, target, type, move) { + if (typeMod !== null) return 1; + }, + secondary: undefined, + target: "normal", + type: "Ghost", + contestType: "Cool", + shortDesc: "Before damage, user becomes primary type of target. 2x dmg on pkmn that share a type w/user.", + }, + glacierfang: { // placeholder but the move change would probably be coded elsewhere + accuracy: 100, + basePower: 85, + category: "Physical", + name: "Glacier Fang", + pp: 15, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Ice Fang', target); + }, + secondary: undefined, + target: "normal", + type: "Ice", + shortDesc: "No additional effect.", + }, + meltingmaul: { // placeholder but the move change would probably be coded elsewhere + accuracy: 100, + basePower: 140, + category: "Physical", + name: "Melting Maul", + pp: 15, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1, cantusetwice: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Steam Eruption', target); + this.add('-anim', source, 'Ice Hammer', target); + }, + onEffectiveness(typeMod, target, type, move) { + return typeMod + this.dex.getEffectiveness('Ice', type); + }, + secondary: undefined, + target: "normal", + type: "Water", + shortDesc: "Combined type effectiveness with Ice. Cannot be used consecutively.", + }, + frostbittenreception: { + accuracy: true, + basePower: 0, + category: "Status", + name: "Frostbitten Reception", + pp: 10, + priority: 0, + flags: {}, + weather: 'snowscape', + volatileStatus: 'frostbittenreception', + onPrepareHit(target, source) { + this.add('-anim', source, 'Chilly Reception', target); + }, + condition: { + noCopy: true, + onStart(pokemon) { + this.add('-start', pokemon, 'Frostbitten Reception'); + pokemon.addVolatile('healblock'); + }, + onResidualOrder: 13, + onResidual(pokemon) { + if (pokemon.status) { + this.damage(pokemon.baseMaxhp / 10); + } + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Frostbitten Reception'); + }, + }, + secondary: undefined, + target: "allAdjacentFoes", + type: "Ice", + shortDesc: "Sets Snow. Foes can't heal and statused foes lose 1/10 of their max HP each turn.", + }, + // Old Moves + kingsshield: { + inherit: true, + condition: { + duration: 1, + onStart(target) { + this.add('-singleturn', target, 'Protect'); + }, + onTryHitPriority: 3, + onTryHit(target, source, move) { + if (!move.flags['protect'] || move.category === 'Status') { + if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; + if (move.isZ || move.isMax) target.getMoveHitData(move).bypassProtect = true; + return; + } + if (move.smartTarget) { + move.smartTarget = false; + } else { + this.add('-activate', target, 'move: Protect'); + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + if (this.checkMoveMakesContact(move, source, target)) { + const boosts = this.ruleTable.tagRules.includes("+pokemontag:cap") ? { atk: -1 } : { atk: -1, spa: -1 }; + this.boost(boosts, source, target, this.dex.getActiveMove("King's Shield")); + } + return this.NOT_FAIL; + }, + onHit(target, source, move) { + const boosts = this.ruleTable.tagRules.includes("+pokemontag:cap") ? { atk: -1 } : { atk: -1, spa: -1 }; + if (move.isZOrMaxPowered && this.checkMoveMakesContact(move, source, target)) { + this.boost(boosts, source, target, this.dex.getActiveMove("King's Shield")); + } + }, + }, + }, + ivycudgel: { + inherit: true, + onModifyType(move, pokemon) { + if (pokemon.hasAbility('crystalize')) { + move.type = 'Rock'; + } + switch (pokemon.species.name) { + case 'Ogerpon-Wellspring': + case 'Ogerpon-Wellspring-Tera': + move.type = 'Water'; + break; + case 'Ogerpon-Hearthflame': + case 'Ogerpon-Hearthflame-Tera': + move.type = 'Fire'; + break; + case 'Ogerpon-Cornerstone': + case 'Ogerpon-Cornerstone-Tera': + move.type = 'Rock'; + break; + case 'Ogerpon-Pixiedust': + case 'Ogerpon-Pixiedust-Tera': + move.type = 'Fairy'; + break; + } + }, + }, + razorshell: { + num: 534, + accuracy: 100, + basePower: 75, + category: "Physical", + name: "Razor Shell", + pp: 10, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 }, + onModifyMove(move, pokemon, target) { + if (!target || this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + const atk = pokemon.getStat('atk', false, true); + const spa = pokemon.getStat('spa', false, true); + const def = target.getStat('def', false, true); + const spd = target.getStat('spd', false, true); + const physical = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * atk) / def) / 50); + const special = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * spa) / spd) / 50); + if (physical < special || (physical === special && this.randomChance(1, 2))) { + move.category = 'Special'; + delete move.flags['contact']; + } + if (move.secondary) move.secondary.boosts = { def: -1, spd: -1 }; + }, + onHit(target, source, move) { + // Shell Side Arm normally reveals its category via animation on cart, but doesn't play either custom animation against allies + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (!source.isAlly(target)) this.hint(move.category + " Razor Shell"); + }, + onAfterSubDamage(damage, target, source, move) { + if (this.ruleTable.tagRules.includes("+pokemontag:cap")) return; + if (!source.isAlly(target)) this.hint(move.category + " Razor Shell"); + }, + secondary: { + chance: 50, + boosts: { + def: -1, + }, + }, + target: "normal", + type: "Water", + contestType: "Cool", + shortDesc: "50% -1 Def/SpD. Special + Non-Contact if it would be stronger.", + }, + plasmafists: { + num: 721, + accuracy: 100, + basePower: 100, + category: "Physical", + isNonstandard: "Past", + name: "Plasma Fists", + pp: 15, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, punch: 1 }, + pseudoWeather: 'iondeluge', + onAfterMoveSecondarySelf(pokemon, target, move) { + if (!this.effectState.bigZera && !this.ruleTable.tagRules.includes("+pokemontag:cap") && + pokemon.baseSpecies.baseSpecies === 'Zeraora' && pokemon.volatiles['charge'] && !pokemon.transformed) { + const zeraForme = pokemon.species.id === 'zeraorabig' ? '' : '-Big'; + pokemon.formeChange('Zeraora' + zeraForme, this.effect, false, '0', '[msg]'); + this.add('-message', "Zeraora's energy is overflowing!"); + pokemon.setAbility('electricsurge', pokemon); + this.effectState.bigZera = true; + } + }, + secondary: undefined, + target: "normal", + type: "Electric", + contestType: "Cool", + shortDesc: "Zeraora: If used while Charge active, transforms.", + }, + morningsun: { + num: 234, + accuracy: true, + basePower: 0, + category: "Status", + name: "Morning Sun", + pp: 5, + priority: 0, + flags: { snatch: 1, heal: 1, metronome: 1 }, + onHit(target, pokemon, move) { + let factor = 0.5; + switch (pokemon.effectiveWeather()) { + case 'sunnyday': + case 'desolateland': + factor = 0.667; + break; + case 'raindance': + case 'primordialsea': + case 'sandstorm': + case 'hail': + case 'snowscape': + factor = 0.25; + break; + } + const success = !!this.heal(this.modify(pokemon.maxhp, factor)); + if (!success) { + this.add('-fail', pokemon, 'heal'); + return this.NOT_FAIL; + } + return success; + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (this.effectState.solStice) return; + if (pokemon.species.name === 'Volcarona' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Volcarona-Solstice', null, true); + pokemon.setAbility('flamebody', pokemon); + this.effectState.solStice = true; + } + }, + secondary: undefined, + target: "self", + type: "Normal", + zMove: { effect: 'clearnegativeboost' }, + contestType: "Beautiful", + }, + chillyreception: { + num: 881, + accuracy: true, + basePower: 0, + category: "Status", + name: "Chilly Reception", + pp: 10, + priority: 0, + flags: {}, + priorityChargeCallback(source) { + source.addVolatile('chillyreception'); + }, + weather: 'snowscape', + selfSwitch: true, + secondary: undefined, + condition: { + duration: 1, + onBeforeMovePriority: 100, + onBeforeMove(source, target, move) { + if (move.id !== 'chillyreception') return; + this.add('-prepare', source, 'Chilly Reception', '[premajor]'); + if (this.effectState.frostKing) return; + if (source.species.name === 'Slowking' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + source.formeChange('Slowking-Frostking', null, true); + source.setAbility('regenerator', source); + this.effectState.frostKing = true; + } + }, + }, + target: "all", + type: "Ice", + }, + /* synthesis: { + inherit: true, + beforeMoveCallback(pokemon) { + if (pokemon.species.name === 'Shaymin' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Shaymin-Sky', null, true); + pokemon.setAbility('serenegrace', pokemon); + return true; + } + }, + }, + flowershield: { + inherit: true, + beforeMoveCallback(pokemon) { + if (pokemon.species.name === 'Shaymin' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Shaymin-Sky', null, true); + pokemon.setAbility('serenegrace', pokemon); + return true; + } + }, + }, + floralhealing: { + inherit: true, + beforeMoveCallback(pokemon) { + if (pokemon.species.name === 'Shaymin' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Shaymin-Sky', null, true); + pokemon.setAbility('serenegrace', pokemon); + return true; + } + }, + }, + strengthsap: { + inherit: true, + beforeMoveCallback(pokemon) { + if (pokemon.species.name === 'Shaymin' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Shaymin-Sky', null, true); + pokemon.setAbility('serenegrace', pokemon); + return true; + } + }, + }, + seedflare: { + inherit: true, + beforeMoveCallback(pokemon) { + if (pokemon.species.name === 'Shaymin-Sky' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Shaymin', null, true); + pokemon.setAbility('flowerveil', pokemon); + return true; + } + }, + }, + gigadrain: { + inherit: true, + beforeMoveCallback(pokemon) { + if (pokemon.species.name === 'Shaymin-Sky' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Shaymin', null, true); + pokemon.setAbility('flowerveil', pokemon); + return true; + } + }, + }, + flowertrick: { + inherit: true, + beforeMoveCallback(pokemon) { + if (pokemon.species.name === 'Shaymin-Sky' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Shaymin', null, true); + pokemon.setAbility('flowerveil', pokemon); + return true; + } + }, + }, + sappyseed: { + inherit: true, + beforeMoveCallback(pokemon) { + if (pokemon.species.name === 'Shaymin-Sky' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Shaymin', null, true); + pokemon.setAbility('flowerveil', pokemon); + return true; + } + }, + }, */ + technoblast: { + num: 546, + accuracy: 100, + basePower: 120, + category: "Special", + isNonstandard: "Past", + name: "Techno Blast", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + onModifyType(move, pokemon) { + if (pokemon.ignoringItem()) return; + move.type = this.runEvent('Drive', pokemon, null, move, 'Normal'); + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (this.effectState.geneSect) return; + if (pokemon.species.name === 'Genesect-Burn' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Genesect-Core', null, true); + pokemon.setAbility('martialize', pokemon); + this.effectState.geneSect = true; + } else if (pokemon.species.name === 'Genesect-Douse' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Genesect-Rust', null, true); + pokemon.setAbility('intoxicate', pokemon); + this.effectState.geneSect = true; + } else if (pokemon.species.name === 'Genesect-Shock' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Genesect-Airborne', null, true); + pokemon.setAbility('aerilate', pokemon); + this.effectState.geneSect = true; + } else if (pokemon.species.name === 'Genesect-Chill' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Genesect-Luminous', null, true); + pokemon.setAbility('pixilate', pokemon); + this.effectState.geneSect = true; + } + }, + secondary: undefined, + target: "normal", + type: "Normal", + contestType: "Cool", + shortDesc: "Type varies based on the held Drive. Genesect transforms.", + }, + shellsmash: { + num: 504, + accuracy: true, + basePower: 0, + category: "Status", + name: "Shell Smash", + pp: 15, + priority: 0, + flags: { snatch: 1, metronome: 1 }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (this.effectState.rockInn) return; + if (pokemon.species.name === 'Crustle' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Crustle-Crawler', null, true); + pokemon.setAbility('sharpness', pokemon); + this.effectState.rockInn = true; + } + }, + boosts: { + def: -1, + spd: -1, + atk: 2, + spa: 2, + spe: 2, + }, + secondary: undefined, + target: "self", + type: "Normal", + zMove: { effect: 'clearnegativeboost' }, + contestType: "Tough", + }, + curse: { + num: 174, + accuracy: true, + basePower: 0, + category: "Status", + name: "Curse", + pp: 10, + priority: 0, + flags: { bypasssub: 1, metronome: 1 }, + volatileStatus: 'curse', + onModifyMove(move, source, target) { + if (!source.hasType('Ghost')) { + move.target = move.nonGhostTarget!; + } else if (source.isAlly(target)) { + move.target = 'randomNormal'; + } + }, + onTryHit(target, source, move) { + if (!source.hasType('Ghost')) { + delete move.volatileStatus; + delete move.onHit; + move.self = { boosts: { spe: -1, atk: 1, def: 1 } }; + } else if (move.volatileStatus && target.volatiles['curse']) { + return false; + } + }, + onHit(target, source) { + this.directDamage(source.maxhp / 2, source, source); + }, + onAfterMoveSecondarySelf(pokemon, target) { + // if (this.effectState.griGus) return; + if (pokemon.species.name === 'Cofagrigus' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + pokemon.formeChange('Cofagrigus-Unchained', null, true); + pokemon.setAbility('darkmagic', pokemon); + // Switch Curse for Dragon's Curse + const curseIndex = pokemon.set.moves + .map(move => move.toLowerCase().replace(/[^a-z0-9]/g, '')).indexOf('curse' as ID); + const move = this.dex.moves.get('dragonscurse'); + const sketchedMove = { + move: move.name, + id: move.id, + pp: move.pp, + maxpp: move.pp, + target: move.target, + disabled: false, + used: false, + }; + pokemon.moveSlots[curseIndex] = sketchedMove; + pokemon.baseMoveSlots[curseIndex] = sketchedMove; + }; + }, + // this.effectState.griGus = true; + condition: { + onStart(pokemon, source) { + this.add('-start', pokemon, 'Curse', `[of] ${source}`); + }, + onResidualOrder: 12, + onResidual(pokemon) { + this.damage(pokemon.baseMaxhp / 4); + }, + }, + secondary: undefined, + target: "normal", + nonGhostTarget: "self", + type: "Ghost", + zMove: { effect: 'curse' }, + contestType: "Tough", + }, + phantomforce: { + num: 566, + accuracy: 100, + basePower: 90, + category: "Physical", + name: "Phantom Force", + pp: 10, + priority: 0, + flags: { contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1 }, + breaksProtect: true, + onTryMove(attacker, defender, move) { + if (attacker.removeVolatile(move.id)) { + return; + } + if (attacker.species.name === 'Dragapult' && !attacker.transformed && + !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + attacker.formeChange('Dragapult-Manifest', move); + attacker.setAbility('analytic', attacker); + } + this.add('-prepare', attacker, move.name); + if (!this.runEvent('ChargeMove', attacker, defender, move)) { + return; + } + attacker.addVolatile('twoturnmove', defender); + return null; + }, + condition: { + duration: 2, + onInvulnerability: false, + }, + secondary: undefined, + target: "normal", + type: "Ghost", + contestType: "Cool", + }, + // advent Moves + tidalgift: { + accuracy: true, + basePower: 0, + category: "Status", + isNonstandard: "CAP", + shortDesc: "Removes the user's side's status and negative stat boosts.", + name: "Tidal Gift", + pp: 20, + priority: 0, + flags: { snatch: 1, distance: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Morning Sun', target); + }, + onHit(target, source) { + this.add('-activate', source, 'move: Tidal Gift'); + let success = false; + const allies = [...target.side.pokemon, ...target.side.allySide?.pokemon || []]; + for (const ally of allies) { + if (ally !== source && !this.suppressingAbility(ally)) { + if (ally.hasAbility('goodasgold')) { + this.add('-immune', ally, '[from] ability: Good as Gold'); + continue; + } + } + if (ally.cureStatus()) success = true; + let activate = false; + const boosts: SparseBoostsTable = {}; + let i: BoostID; + for (i in ally.boosts) { + if (ally.boosts[i] < 0) { + activate = true; + boosts[i] = 0; + } + } + if (activate) { + ally.setBoost(boosts); + this.add('-clearnegativeboost', ally, '[silent]'); + success = true; + } + return success; + } + }, + target: "allyTeam", + type: "Water", + zMove: { effect: 'heal' }, + contestType: "Beautiful", + }, + iciclestorm: { + accuracy: 95, + basePower: 90, + category: "Physical", + isNonstandard: "CAP", + shortDesc: "Summons Snow for 5 turns.", + name: "Icicle Storm", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1 }, + weather: 'snowscape', + onPrepareHit(target, source) { + this.add('-anim', source, 'Icicle Crash', target); + }, + secondary: undefined, + target: "normal", + type: "Ice", + }, + gingerstorm: { + accuracy: true, + basePower: 0, + category: "Status", + isNonstandard: "CAP", + shortDesc: "Summons Gingerstorm for 5 turns.", + name: "Gingerstorm", + pp: 10, + priority: 0, + flags: {}, + weather: 'gingerstorm', + onPrepareHit(target, source) { + this.add('-anim', source, 'Sandstorm', target); + }, + secondary: undefined, + target: "all", + type: "Fire", + }, + christmascannon: { + accuracy: 95, + basePower: 100, + category: "Special", + isNonstandard: "CAP", + shortDesc: "Sets Spikes. 20% chance to heal 25% of the user’s HP. Can't use twice in a row.", + name: "Christmas Cannon", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1, cantusetwice: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Armor Cannon', target); + }, + onAfterHit(target, source, move) { + if (!move.hasSheerForce && source.hp) { + for (const side of source.side.foeSidesWithConditions()) { + side.addSideCondition('spikes'); + } + } + if (this.randomChance(1, 5)) { + this.heal(source.baseMaxhp / 4, source, source); + } + }, + onAfterSubDamage(damage, target, source, move) { + if (!move.hasSheerForce && source.hp) { + for (const side of source.side.foeSidesWithConditions()) { + side.addSideCondition('spikes'); + } + } + if (this.randomChance(1, 5)) { + this.heal(source.baseMaxhp / 4, source, source); + } + }, + secondary: {}, // Sheer Force-boosted + target: "normal", + type: "Poison", + }, + miracledrill: { + accuracy: 90, + basePower: 25, + category: "Physical", + isNonstandard: "CAP", + shortDesc: "Hits 2-5 times. Each hit has a 10% chance of either raising or lowering user's Speed by 1.", + name: "Miracle Drill", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1 }, + multihit: [2, 5], + onPrepareHit(target, source) { + this.add('-anim', source, 'Drill Run', target); + }, + secondary: { + chance: 10, + onHit(target, source) { + const result = this.random(2); + if (result === 0) { + this.boost({ spe: 1 }, source); + } else { + this.boost({ spe: -1 }, source); + } + }, + }, + target: "normal", + type: "Ground", + maxMove: { basePower: 100 }, + contestType: "Cool", + }, + moneytrees: { + accuracy: 100, + basePower: 80, + category: "Physical", + isNonstandard: "CAP", + shortDesc: "Deals doubled damage in Sun or Grassy Terrain.", + name: "Money Trees", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Wood Hammer', target); + }, + onBasePower(basePower, source) { + if ((this.field.isTerrain('grassyterrain') && source.isGrounded()) || + ['sunnyday', 'desolateland'].includes(source.effectiveWeather()) + ) { + this.debug('field buff'); + return this.chainModify(2); + } + }, + secondary: undefined, + target: "normal", + type: "Grass", + }, + cashout: { + accuracy: 100, + basePower: 75, + category: "Special", + isNonstandard: "CAP", + shortDesc: "Separate 10% chances of: User +1 SpA/SpD/Spe, Foe -1 SpA/SpD/Spe.", + name: "Cash Out", + pp: 10, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Leaf Storm', target); + }, + secondaries: [ + { + chance: 10, + boosts: { + spa: -1, + }, + }, { + chance: 10, + boosts: { + spd: -1, + }, + }, { + chance: 10, + boosts: { + spe: -1, + }, + }, { + chance: 10, + self: { + boosts: { + spa: 1, + }, + }, + }, { + chance: 10, + self: { + boosts: { + spd: 1, + }, + }, + }, { + chance: 10, + self: { + boosts: { + spe: 1, + }, + }, + }, + ], + target: "normal", + type: "Grass", + contestType: "Cool", + }, + revelationray: { + accuracy: 100, + basePower: 90, + category: "Special", + isNonstandard: "CAP", + shortDesc: "Type is user's primary type. User and target swap types.", + name: "Revelation Ray", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, dance: 1, metronome: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Revelation Dance', target); + }, + onModifyType(move, pokemon) { + const types = pokemon.getTypes(); + let type = types[0]; + if (type === 'Bird') type = '???'; + if (type === '???' && types[1]) type = types[1]; + move.type = type; + }, + // finish later + secondary: undefined, + target: "normal", + type: "Normal", + contestType: "Beautiful", + }, + umbralscythe: { + accuracy: 100, + basePower: 120, + category: "Physical", + isNonstandard: "CAP", + shortDesc: "Has 33% recoil.", + name: "Umbral Scythe", + pp: 15, + priority: 0, + flags: { slicing: 1, protect: 1, mirror: 1 }, + recoil: [33, 100], + onPrepareHit(target, source) { + this.add('-anim', source, 'Night Slash', target); + }, + secondary: undefined, + target: "normal", + type: "Dark", + contestType: "Tough", + }, + diracsea: { + accuracy: 100, + basePower: 70, + basePowerCallback(pokemon, target, move) { + if (target.newlySwitched) { + this.debug('Dirac Sea damage boost'); + return move.basePower * 2; + } + this.debug('Dirac Sea NOT boosted'); + return move.basePower; + }, + category: "Special", + isNonstandard: "CAP", + shortDesc: "2x if the foe switched in this turn.", + name: "Dirac Sea", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Shadow Ball', target); + }, + secondary: undefined, + target: "normal", + type: "Ghost", + }, + stoneswipe: { + accuracy: 90, + basePower: 95, + category: "Physical", + isNonstandard: "CAP", + shortDesc: "30% chance to lower the foe's Speed.", + name: "Stone Swipe", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Stone Axe', target); + }, + secondary: { + chance: 30, + boosts: { + spe: -1, + }, + }, + target: "normal", + type: "Rock", + contestType: "Cute", + }, + sugarrush: { + accuracy: 100, + basePower: 0, + category: "Status", + isNonstandard: "CAP", + shortDesc: "+2 Atk. +1 Atk & Spe if the user has 75% of their max HP or less.", + name: "Sugar Rush", + pp: 10, + priority: 0, + flags: { snatch: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dragon Dance', target); + }, + onHit(target) { + if (target.hp <= target.maxhp / 1.33333333) { + this.boost({ atk: 1, spe: 1 }, target); + } else { + this.boost({ atk: 2 }, target); + } + }, + secondary: undefined, + target: "self", + type: "Fairy", + zMove: { effect: 'heal' }, + contestType: "Clever", + }, + waningmoon: { + accuracy: 100, + basePower: 100, + category: "Special", + isNonstandard: "CAP", + shortDesc: "Hits after two turns. Heals 25% of the user's max HP. Bypasses protection.", + name: "Waning Moon", + pp: 10, + priority: 0, + flags: { allyanim: 1, futuremove: 1, heal: 1 }, + ignoreImmunity: true, + onTry(source, target) { + if (!target.side.addSlotCondition(target, 'futuremove')) return false; + this.heal(source.baseMaxhp / 4, source, source); + Object.assign(target.side.slotConditions[target.position]['futuremove'], { + move: 'waningmoon', + source, + moveData: { + id: 'waningmoon', + name: "Waning Moon", + accuracy: 100, + basePower: 100, + category: "Special", + priority: 0, + flags: { allyanim: 1, metronome: 1, futuremove: 1 }, + ignoreImmunity: false, + effectType: 'Move', + type: 'Dark', + }, + }); + this.add('-start', source, 'move: Waning Moon'); + return this.NOT_FAIL; + }, + secondary: undefined, + target: "normal", + type: "Dark", + contestType: "Clever", + }, + fireworkshot: { + accuracy: 100, + basePower: 40, + category: "Special", + isNonstandard: "CAP", + shortDesc: "Usually moves first.", + name: "Firework Shot", + pp: 10, + priority: 1, + flags: { protect: 1, mirror: 1 }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Torch Song', target); + }, + secondary: undefined, + target: "normal", + type: "Fire", + contestType: "Cool", + }, + draconicshuffle: { + accuracy: 100, + basePower: 50, + category: "Physical", + isNonstandard: "CAP", + shortDesc: "Switches the user out. 10% chance to burn foe.", + name: "Draconic Shuffle", + pp: 10, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1 }, + selfSwitch: true, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dragon Tail', target); + }, + secondary: { + chance: 10, + status: 'brn', + }, + target: "normal", + type: "Dragon", + contestType: "Cute", + }, + triplestaffbash: { + accuracy: 90, + basePower: 30, + category: "Physical", + isNonstandard: "CAP", + shortDesc: "Hits 3 times, each with a 20% chance to paralyze.", + name: "Triple-Staff Bash", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1 }, + multihit: 3, + onPrepareHit(target, source) { + this.add('-anim', source, 'Zing Zap', target); + }, + secondary: { + chance: 20, + status: 'par', + }, + target: "normal", + type: "Electric", + maxMove: { basePower: 100 }, + contestType: "Cool", + }, + holidaypreparation: { + accuracy: true, + basePower: 0, + category: "Status", + isNonstandard: "CAP", + shortDesc: "Switches the user out. Next switch: +1 Atk, +Ice.", + name: "Holiday Preparation", + pp: 10, + priority: 0, + flags: {}, + sideCondition: 'holidaypreparation', + condition: { + onSwitchIn() { + const source = this.effectState.source; + if (!source.fainted) { + source.side.removeSideCondition('holidaypreparation'); + this.boost({ atk: 1 }, source); + if (!source.hasType('Ice') && source.addType('Ice')) { + this.add('-start', source, 'typeadd', 'Ice', '[from] move: Holiday Preparation'); + } + source.side.removeSideCondition('holidaypreparation'); + } + }, + }, + onTry(source) { + return !!this.canSwitch(source.side); + }, + selfSwitch: true, + secondary: undefined, + target: "self", + type: "Ice", + zMove: { effect: 'heal' }, + contestType: "Cool", + }, + bristles: { + accuracy: true, + basePower: 0, + category: "Status", + isNonstandard: "CAP", + shortDesc: "Grass-type Stealth Rock.", + name: "Bristles", + pp: 20, + priority: 0, + flags: { reflectable: 1, mustpressure: 1 }, + sideCondition: 'bristles', + condition: { + // this is a side condition + onSideStart(side) { + this.add('-sidestart', side, 'move: Bristles'); + }, + onSwitchIn(pokemon) { + if (pokemon.hasItem('heavydutyboots')) return; + const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('bristles')), -6, 6); + this.damage(pokemon.maxhp * (2 ** typeMod) / 8); + }, + }, + secondary: undefined, + target: "foeSide", + type: "Grass", + zMove: { boost: { def: 1 } }, + contestType: "Cool", + }, + gmaxwindrage: { + inherit: true, + self: { + onHit(source) { + let success = false; + const removeAll = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'bristles']; + const removeTarget = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', ...removeAll]; + for (const targetCondition of removeTarget) { + if (source.side.foe.removeSideCondition(targetCondition)) { + if (!removeAll.includes(targetCondition)) continue; + this.add('-sideend', source.side.foe, this.dex.conditions.get(targetCondition).name, '[from] move: G-Max Wind Rage', `[of] ${source}`); + success = true; + } + } + for (const sideCondition of removeAll) { + if (source.side.removeSideCondition(sideCondition)) { + this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: G-Max Wind Rage', `[of] ${source}`); + success = true; + } + } + this.field.clearTerrain(); + return success; + }, + }, + }, + mortalspin: { + inherit: true, + onAfterHit(target, pokemon, move) { + if (!move.hasSheerForce) { + if (pokemon.hp && pokemon.removeVolatile('leechseed')) { + this.add('-end', pokemon, 'Leech Seed', '[from] move: Mortal Spin', `[of] ${pokemon}`); + } + const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'bristles']; + for (const condition of sideConditions) { + if (pokemon.hp && pokemon.side.removeSideCondition(condition)) { + this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Mortal Spin', `[of] ${pokemon}`); + } + } + if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { + pokemon.removeVolatile('partiallytrapped'); + } + } + }, + onAfterSubDamage(damage, target, pokemon, move) { + if (!move.hasSheerForce) { + if (pokemon.hp && pokemon.removeVolatile('leechseed')) { + this.add('-end', pokemon, 'Leech Seed', '[from] move: Mortal Spin', `[of] ${pokemon}`); + } + const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'bristles']; + for (const condition of sideConditions) { + if (pokemon.hp && pokemon.side.removeSideCondition(condition)) { + this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Mortal Spin', `[of] ${pokemon}`); + } + } + if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { + pokemon.removeVolatile('partiallytrapped'); + } + } + }, + }, + rapidspin: { + inherit: true, + onAfterHit(target, pokemon, move) { + if (!move.hasSheerForce) { + if (pokemon.hp && pokemon.removeVolatile('leechseed')) { + this.add('-end', pokemon, 'Leech Seed', '[from] move: Rapid Spin', `[of] ${pokemon}`); + } + const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'bristles']; + for (const condition of sideConditions) { + if (pokemon.hp && pokemon.side.removeSideCondition(condition)) { + this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Spin', `[of] ${pokemon}`); + } + } + if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { + pokemon.removeVolatile('partiallytrapped'); + } + } + }, + onAfterSubDamage(damage, target, pokemon, move) { + if (!move.hasSheerForce) { + if (pokemon.hp && pokemon.removeVolatile('leechseed')) { + this.add('-end', pokemon, 'Leech Seed', '[from] move: Rapid Spin', `[of] ${pokemon}`); + } + const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'bristles']; + for (const condition of sideConditions) { + if (pokemon.hp && pokemon.side.removeSideCondition(condition)) { + this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Spin', `[of] ${pokemon}`); + } + } + if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { + pokemon.removeVolatile('partiallytrapped'); + } + } + }, + }, + tidyup: { + inherit: true, + onHit(pokemon) { + let success = false; + for (const active of this.getAllActive()) { + if (active.removeVolatile('substitute')) success = true; + } + const removeAll = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'bristles']; + const sides = [pokemon.side, ...pokemon.side.foeSidesWithConditions()]; + for (const side of sides) { + for (const sideCondition of removeAll) { + if (side.removeSideCondition(sideCondition)) { + this.add('-sideend', side, this.dex.conditions.get(sideCondition).name); + success = true; + } + } + } + if (success) this.add('-activate', pokemon, 'move: Tidy Up'); + return !!this.boost({ atk: 1, spe: 1 }, pokemon, pokemon, null, false, true) || success; + }, + }, + courtchange: { + inherit: true, + onHitField(target, source) { + const sideConditions = [ + 'mist', 'lightscreen', 'reflect', 'spikes', 'safeguard', 'tailwind', 'toxicspikes', 'stealthrock', 'waterpledge', 'firepledge', 'grasspledge', 'stickyweb', 'auroraveil', 'luckychant', 'gmaxsteelsurge', 'gmaxcannonade', 'gmaxvinelash', 'gmaxwildfire', 'gmaxvolcalith', 'bristles', + ]; + let success = false; + if (this.gameType === "freeforall") { + // the list of all sides in clockwise order + const sides = [this.sides[0], this.sides[3]!, this.sides[1], this.sides[2]!]; + const temp: { [k: number]: typeof source.side.sideConditions } = { 0: {}, 1: {}, 2: {}, 3: {} }; + for (const side of sides) { + for (const id in side.sideConditions) { + if (!sideConditions.includes(id)) continue; + temp[side.n][id] = side.sideConditions[id]; + delete side.sideConditions[id]; + success = true; + } + } + for (let i = 0; i < 4; i++) { + const sourceSideConditions = temp[sides[i].n]; + const targetSide = sides[(i + 1) % 4]; // the next side in rotation + for (const id in sourceSideConditions) { + targetSide.sideConditions[id] = sourceSideConditions[id]; + targetSide.sideConditions[id].target = targetSide; + } + } + } else { + const sourceSideConditions = source.side.sideConditions; + const targetSideConditions = source.side.foe.sideConditions; + const sourceTemp: typeof sourceSideConditions = {}; + const targetTemp: typeof targetSideConditions = {}; + for (const id in sourceSideConditions) { + if (!sideConditions.includes(id)) continue; + sourceTemp[id] = sourceSideConditions[id]; + delete sourceSideConditions[id]; + success = true; + } + for (const id in targetSideConditions) { + if (!sideConditions.includes(id)) continue; + targetTemp[id] = targetSideConditions[id]; + delete targetSideConditions[id]; + success = true; + } + for (const id in sourceTemp) { + targetSideConditions[id] = sourceTemp[id]; + targetSideConditions[id].target = source.side.foe; + } + for (const id in targetTemp) { + sourceSideConditions[id] = targetTemp[id]; + sourceSideConditions[id].target = source.side; + } + } + if (!success) return false; + this.add('-swapsideconditions'); + this.add('-activate', source, 'move: Court Change'); + }, + }, + defog: { + inherit: true, + onHit(target, source, move) { + let success = false; + if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({ evasion: -1 }); + const removeAll = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', 'bristles']; + const removeTarget = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', ...removeAll]; + for (const targetCondition of removeTarget) { + if (target.side.removeSideCondition(targetCondition)) { + if (!removeAll.includes(targetCondition)) continue; + this.add('-sideend', target.side, this.dex.conditions.get(targetCondition).name, '[from] move: Defog', `[of] ${source}`); + success = true; + } + } + for (const sideCondition of removeAll) { + if (source.side.removeSideCondition(sideCondition)) { + this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Defog', `[of] ${source}`); + success = true; + } + } + this.field.clearTerrain(); + return success; + }, + }, + auroraveil: { + inherit: true, + onTry(source) { + if (!this.field.isWeather(['hail', 'snowscape']) && !source.hasAbility('heartofcold')) return false; + }, + }, + blizzard: { + inherit: true, + onModifyMove(move, pokemon) { + if (this.field.isWeather(['hail', 'snowscape']) || pokemon.hasAbility('heartofcold')) move.accuracy = true; + }, + }, + weatherball: { + inherit: true, + onModifyType(move, pokemon) { + switch (pokemon.effectiveWeather()) { + case 'sunnyday': + case 'desolateland': + move.type = 'Fire'; + break; + case 'raindance': + case 'primordialsea': + move.type = 'Water'; + break; + case 'sandstorm': + move.type = 'Rock'; + break; + case 'hail': + case 'snowscape': + move.type = 'Ice'; + break; + } + if (!this.field.isWeather(['hail', 'snowscape']) && pokemon.hasAbility('heartofcold')) { + move.type = 'Ice'; + } + }, + onModifyMove(move, pokemon) { + switch (pokemon.effectiveWeather()) { + case 'sunnyday': + case 'desolateland': + move.basePower *= 2; + break; + case 'raindance': + case 'primordialsea': + move.basePower *= 2; + break; + case 'sandstorm': + move.basePower *= 2; + break; + case 'hail': + case 'snowscape': + move.basePower *= 2; + break; + } + if (!this.field.isWeather(['hail', 'snowscape']) && pokemon.hasAbility('heartofcold')) { + move.basePower *= 2; + } + this.debug(`BP: ${move.basePower}`); + }, + }, + // heart of cold to-do: halving the bp/healing of solar blade/beam and synthesis clones +}; diff --git a/data/mods/ccapm2025/pokedex.ts b/data/mods/ccapm2025/pokedex.ts new file mode 100644 index 0000000000..62afeb7077 --- /dev/null +++ b/data/mods/ccapm2025/pokedex.ts @@ -0,0 +1,2218 @@ +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { + aegislash: { + inherit: true, + types: ["Ghost", "Fighting"], + baseStats: { hp: 60, atk: 50, def: 140, spa: 50, spd: 140, spe: 60 }, + otherFormes: ["Aegislash-Blade", "Aegislash-Soulbound"], + formeOrder: ["Aegislash", "Aegislash-Blade", "Aegislash-Soulbound"], + }, + aegislashsoulbound: { + num: 681, + name: "Aegislash-Soulbound", + baseSpecies: "Aegislash", + forme: "Soulbound", + types: ["Ghost", "Fighting"], + baseStats: { hp: 60, atk: 140, def: 140, spa: 50, spd: 50, spe: 60 }, + abilities: { 0: "Stance Change" }, + heightm: 1.7, + weightkg: 53, + color: "Brown", + eggGroups: ["Mineral"], + requiredMove: "Soulbound Slash", + battleOnly: "Aegislash", + }, + alcremie: { + inherit: true, + baseStats: { hp: 90, atk: 60, def: 75, spa: 110, spd: 121, spe: 64 }, + abilities: { 0: "Aroma Veil" }, + otherFormes: [ + "Alcremie-Sweetened", "Alcremie-Sweetened-Ruby-Cream", "Alcremie-Sweetened-Matcha-Cream", + "Alcremie-Sweetened-Mint-Cream", "Alcremie-Sweetened-Lemon-Cream", "Alcremie-Sweetened-Salted-Cream", + "Alcremie-Sweetened-Ruby-Swirl", "Alcremie-Sweetened-Caramel-Swirl", "Alcremie-Sweetened-Rainbow-Swirl", + ], + formeOrder: [ + "Alcremie", "Alcremie-Ruby-Cream", "Alcremie-Matcha-Cream", "Alcremie-Mint-Cream", "Alcremie-Lemon-Cream", "Alcremie-Salted-Cream", + "Alcremie-Ruby-Swirl", "Alcremie-Caramel-Swirl", "Alcremie-Rainbow-Swirl", "Alcremie-Sweetened", "Alcremie-Sweetened-Ruby-Cream", + "Alcremie-Sweetened-Matcha-Cream", "Alcremie-Sweetened-Mint-Cream", "Alcremie-Sweetened-Lemon-Cream", "Alcremie-Sweetened-Salted-Cream", + "Alcremie-Sweetened-Ruby-Swirl", "Alcremie-Sweetened-Caramel-Swirl", "Alcremie-Sweetened-Rainbow-Swirl", + ], + }, + alcremiesweetened: { + num: 869, + name: "Alcremie-Sweetened", + baseSpecies: "Alcremie", + forme: "Sweetened", + types: ["Fairy"], + baseStats: { hp: 90, atk: 80, def: 95, spa: 130, spd: 141, spe: 84 }, + abilities: { 0: "Supersweet Syrup" }, + heightm: 0.3, + weightkg: 0.5, + color: "White", + eggGroups: ["Fairy", "Amorphous"], + battleOnly: "Alcremie", + }, + alcremiesweetenedrubycream: { + num: 869, + name: "Alcremie-Sweetened-Ruby-Cream", + baseSpecies: "Alcremie", + forme: "Sweetened-Ruby-Cream", + types: ["Fairy"], + baseStats: { hp: 90, atk: 80, def: 95, spa: 130, spd: 141, spe: 84 }, + abilities: { 0: "Competitive" }, + heightm: 0.3, + weightkg: 0.5, + color: "Pink", + eggGroups: ["Fairy", "Amorphous"], + battleOnly: "Alcremie-Ruby-Cream", + }, + alcremiesweetenedmatchacream: { + num: 869, + name: "Alcremie-Sweetened-Matcha-Cream", + baseSpecies: "Alcremie", + forme: "Sweetened-Matcha-Cream", + types: ["Fairy"], + baseStats: { hp: 90, atk: 80, def: 95, spa: 130, spd: 141, spe: 84 }, + abilities: { 0: "Heatproof" }, + heightm: 0.3, + weightkg: 0.5, + color: "Green", + eggGroups: ["Fairy", "Amorphous"], + battleOnly: "Alcremie-Matcha-Cream", + }, + alcremiesweetenedmintcream: { + num: 869, + name: "Alcremie-Sweetened-Mint-Cream", + baseSpecies: "Alcremie", + forme: "Sweetened-Mint-Cream", + types: ["Fairy"], + baseStats: { hp: 90, atk: 80, def: 95, spa: 130, spd: 141, spe: 84 }, + abilities: { 0: "Snow Warning" }, + heightm: 0.3, + weightkg: 0.5, + color: "Blue", + eggGroups: ["Fairy", "Amorphous"], + battleOnly: "Alcremie-Mint-Cream", + }, + alcremiesweetenedlemoncream: { + num: 869, + name: "Alcremie-Sweetened-Lemon-Cream", + baseSpecies: "Alcremie", + forme: "Sweetened-Lemon-Cream", + types: ["Fairy"], + baseStats: { hp: 90, atk: 80, def: 95, spa: 130, spd: 141, spe: 84 }, + abilities: { 0: "Screen Cleaner" }, + heightm: 0.3, + weightkg: 0.5, + color: "Yellow", + eggGroups: ["Fairy", "Amorphous"], + battleOnly: "Alcremie-Lemon-Cream", + }, + alcremiesweetenedsaltedcream: { + num: 869, + name: "Alcremie-Sweetened-Salted-Cream", + baseSpecies: "Alcremie", + forme: "Sweetened-Salted-Cream", + types: ["Fairy"], + baseStats: { hp: 90, atk: 80, def: 95, spa: 130, spd: 141, spe: 84 }, + abilities: { 0: "Purifying Salt" }, + heightm: 0.3, + weightkg: 0.5, + color: "Yellow", + eggGroups: ["Fairy", "Amorphous"], + battleOnly: "Alcremie-Salted-Cream", + }, + alcremiesweetenedrubyswirl: { + num: 869, + name: "Alcremie-Sweetened-Ruby-Swirl", + baseSpecies: "Alcremie", + forme: "Sweetened-Ruby-Swirl", + types: ["Fairy"], + baseStats: { hp: 90, atk: 80, def: 95, spa: 130, spd: 141, spe: 84 }, + abilities: { 0: "Trace" }, + heightm: 0.3, + weightkg: 0.5, + color: "Yellow", + eggGroups: ["Fairy", "Amorphous"], + battleOnly: "Alcremie-Ruby-Swirl", + }, + alcremiesweetenedcaramelswirl: { + num: 869, + name: "Alcremie-Sweetened-Caramel-Swirl", + baseSpecies: "Alcremie", + forme: "Sweetened-Caramel-Swirl", + types: ["Fairy"], + baseStats: { hp: 90, atk: 80, def: 95, spa: 130, spd: 141, spe: 84 }, + abilities: { 0: "Sand Spit" }, + heightm: 0.3, + weightkg: 0.5, + color: "Yellow", + eggGroups: ["Fairy", "Amorphous"], + battleOnly: "Alcremie-Caramel-Swirl", + }, + alcremiesweetenedrainbowswirl: { + num: 869, + name: "Alcremie-Sweetened-Rainbow-Swirl", + baseSpecies: "Alcremie", + forme: "Sweetened-Rainbow-Swirl", + types: ["Fairy"], + baseStats: { hp: 90, atk: 80, def: 95, spa: 130, spd: 141, spe: 84 }, + abilities: { 0: "Pastel Veil" }, + heightm: 0.3, + weightkg: 0.5, + color: "Yellow", + eggGroups: ["Fairy", "Amorphous"], + battleOnly: "Alcremie-Rainbow-Swirl", + }, + aurorus: { + inherit: true, + types: ["Ice", "Rock"], + baseStats: { hp: 123, atk: 77, def: 92, spa: 99, spd: 102, spe: 58 }, + abilities: { 0: "Snow Warning" }, + otherFormes: ["Aurorus-Glorious"], + formeOrder: ["Aurorus", "Aurorus-Glorious"], + }, + aurorusglorious: { + num: 699, + name: "Aurorus-Glorious", + baseSpecies: "Aurorus", + forme: "Glorious", + types: ["Ice", "Fairy"], + baseStats: { hp: 143, atk: 77, def: 112, spa: 109, spd: 101, spe: 58 }, + abilities: { 0: "Mega Launcher" }, + heightm: 2.7, + weightkg: 225, + color: "Blue", + eggGroups: ["Monster"], + battleOnly: "Aurorus", + }, + beartic: { + inherit: true, + baseStats: { hp: 95, atk: 130, def: 80, spa: 70, spd: 80, spe: 50 }, + abilities: { 0: "Slush Rush" }, + otherFormes: ["Beartic-Freshwater"], + formeOrder: ["Beartic", "Beartic-Freshwater"], + }, + bearticfreshwater: { + num: 614, + name: "Beartic-Freshwater", + baseSpecies: "Beartic", + forme: "Freshwater", + types: ["Ice", "Water"], + baseStats: { hp: 95, atk: 130, def: 90, spa: 85, spd: 90, spe: 105 }, + abilities: { 0: "Cloud Nine" }, + heightm: 2.6, + weightkg: 260, + color: "White", + eggGroups: ["Field"], + battleOnly: "Beartic", + }, + blaziken: { + inherit: true, + baseStats: { hp: 80, atk: 120, def: 70, spa: 110, spd: 70, spe: 80 }, + abilities: { 0: "Tough Claws" }, + otherFormes: ["Blaziken-Mega", "Blaziken-Wildfire"], + formeOrder: ["Blaziken", "Blaziken-Mega", "Blaziken-Wildfire"], + }, + blazikenwildfire: { + num: 257, + name: "Blaziken-Wildfire", + baseSpecies: "Blaziken", + forme: "Wildfire", + types: ["Fire", "Fighting"], + baseStats: { hp: 80, atk: 120, def: 70, spa: 110, spd: 70, spe: 80 }, + abilities: { 0: "Burnout" }, + heightm: 1.9, + weightkg: 52, + color: "Red", + eggGroups: ["Field"], + battleOnly: "Blaziken", + }, + clawitzer: { + inherit: true, + types: ["Water", "Dragon"], + baseStats: { hp: 71, atk: 73, def: 88, spa: 120, spd: 89, spe: 94 }, + abilities: { 0: "Mega Launcher" }, + otherFormes: ["Clawitzer-Curled"], + formeOrder: ["Clawitzer", "Clawitzer-Curled"], + }, + clawitzercurled: { + num: 693, + name: "Clawitzer-Curled", + baseSpecies: "Clawitzer", + forme: "Curled", + types: ["Water", "Steel"], + baseStats: { hp: 71, atk: 73, def: 128, spa: 89, spd: 120, spe: 54 }, + abilities: { 0: "Prism Armor" }, + heightm: 1.3, + weightkg: 35.3, + color: "Blue", + eggGroups: ["Water 1", "Water 3"], + battleOnly: "Clawitzer", + }, + cofagrigus: { + inherit: true, + types: ["Ghost", "Steel"], + baseStats: { hp: 58, atk: 95, def: 145, spa: 50, spd: 105, spe: 30 }, + abilities: { 0: "Mummy" }, + otherFormes: ["Cofagrigus-Unchained"], + formeOrder: ["Cofagrigus", "Cofagrigus-Unchained"], + }, + cofagrigusunchained: { + num: 563, + name: "Cofagrigus-Unchained", + baseSpecies: "Cofagrigus", + forme: "Unchained", + types: ["Ghost", "Dragon"], + baseStats: { hp: 120, atk: 105, def: 95, spa: 145, spd: 55, spe: 100 }, + abilities: { 0: "Dark Magic" }, + heightm: 1.7, + weightkg: 76.5, + color: "Yellow", + eggGroups: ["Mineral", "Amorphous"], + requiredMove: "Curse", + battleOnly: "Cofagrigus", + }, + crustle: { + inherit: true, + types: ["Bug", "Rock"], + baseStats: { hp: 70, atk: 105, def: 125, spa: 65, spd: 75, spe: 45 }, + abilities: { 0: "Weak Armor" }, + otherFormes: ["Crustle-Crawler"], + formeOrder: ["Crustle", "Crustle-Crawler"], + }, + crustlecrawler: { + num: 558, + name: "Crustle-Crawler", + baseSpecies: "Crustle", + forme: "Crawler", + types: ["Bug", "Dark"], + baseStats: { hp: 70, atk: 115, def: 85, spa: 75, spd: 55, spe: 85 }, + abilities: { 0: "Sharpness" }, + heightm: 0.4, + weightkg: 29, + color: "Red", + eggGroups: ["Bug", "Mineral"], + requiredMove: "Shell Smash", + battleOnly: "Crustle", + }, + darmanitan: { + inherit: true, + types: ["Fire"], + baseStats: { hp: 105, atk: 140, def: 55, spa: 30, spd: 55, spe: 95 }, + abilities: { 0: "Sheer Force" }, + otherFormes: ["Darmanitan-Zen", "Darmanitan-Galar", "Darmanitan-Galar-Zen", "Darmanitan-Mega"], + formeOrder: ["Darmanitan", "Darmanitan-Zen", "Darmanitan-Galar", "Darmanitan-Galar-Zen", "Darmanitan-Mega"], + }, + darmanitanmega: { + num: 555, + name: "Darmanitan-Mega", + baseSpecies: "Darmanitan", + forme: "Mega", + types: ["Fire", "Fighting"], + baseStats: { hp: 105, atk: 170, def: 75, spa: 30, spd: 65, spe: 135 }, + abilities: { 0: "Moxie" }, + heightm: 1.3, + weightkg: 92.9, + color: "Red", + eggGroups: ["Field"], + requiredItem: "Darminitanite", + }, + diancie: { + inherit: true, + types: ["Rock", "Fairy"], + baseStats: { hp: 50, atk: 100, def: 150, spa: 100, spd: 150, spe: 50 }, + abilities: { 0: "Clear Body" }, + otherFormes: ["Diancie-Mega", "Diancie-Infused"], + formeOrder: ["Diancie", "Diancie-Mega", "Diancie-Infused"], + }, + diancieinfused: { + num: 719, + name: "Diancie-Infused", + baseSpecies: "Diancie", + forme: "Infused", + types: ["Rock", "Fairy"], + baseStats: { hp: 50, atk: 100, def: 200, spa: 100, spd: 200, spe: 50 }, + abilities: { 0: "Gem Infusion" }, + heightm: 0.7, + weightkg: 8.8, + color: "Pink", + eggGroups: ["Undiscovered"], + tags: ["Mythical"], + battleOnly: "Diancie", + }, + dragapult: { + inherit: true, + types: ["Dragon", "Ghost"], + baseStats: { hp: 88, atk: 120, def: 75, spa: 100, spd: 75, spe: 142 }, + abilities: { 0: "Infiltrator" }, + otherFormes: ["Dragapult-Manifest"], + formeOrder: ["Dragapult", "Dragapult-Manifest"], + }, + dragapultmanifest: { + num: 887, + name: "Dragapult-Manifest", + baseSpecies: "Dragapult", + forme: "Manifest", + types: ["Dragon", "Ghost"], + baseStats: { hp: 88, atk: 130, def: 75, spa: 130, spd: 75, spe: 102 }, + abilities: { 0: "Analytic" }, + heightm: 3, + weightkg: 50, + color: "Green", + eggGroups: ["Amorphous", "Dragon"], + battleOnly: "Dragapult", + }, + drifblim: { + inherit: true, + types: ["Ghost", "Flying"], + baseStats: { hp: 150, atk: 80, def: 44, spa: 90, spd: 54, spe: 80 }, + abilities: { 0: "Aftermath" }, + otherFormes: ["Drifblim-Inflamed"], + formeOrder: ["Drifblim", "Drifblim-Inflamed"], + }, + drifbliminflamed: { + num: 426, + name: "Drifblim-Inflamed", + baseSpecies: "Drifblim", + forme: "Inflamed", + types: ["Ghost", "Flying"], + baseStats: { hp: 150, atk: 100, def: 44, spa: 100, spd: 44, spe: 100 }, + abilities: { 0: "Berserk" }, + heightm: 1.2, + weightkg: 15, + color: "Purple", + eggGroups: ["Amorphous"], + requiredAbility: "Berserk", + battleOnly: "Drifblim", + }, + dudunsparce: { + inherit: true, + types: ["Normal"], + baseStats: { hp: 125, atk: 110, def: 80, spa: 85, spd: 75, spe: 55 }, + abilities: { 0: "Serene Grace" }, + otherFormes: ["Dudunsparce-Three-Segment", "Du-Dudunsparce", "Dudunsparce-tongueemoji"], + formeOrder: ["Dudunsparce", "Dudunsparce-Three-Segment", "Du-Dudunsparce", "Dudunsparce-tongueemoji"], + }, + dududunsparce: { + num: 982, + name: "Du-Dudunsparce", + baseSpecies: "Dudunsparce", + forme: "Du", + types: ["Normal"], + baseStats: { hp: 70, atk: 120, def: 80, spa: 85, spd: 75, spe: 130 }, + abilities: { 0: "Natural Cure" }, + heightm: 4.5, + weightkg: 47.4, + color: "Yellow", + eggGroups: ["Field"], + battleOnly: "Dudunsparce", + }, + dudunsparcetongueemoji: { + num: 982, + name: "Dudunsparce-tongueemoji", + baseSpecies: "Dudunsparce", + forme: "tongueemoji", + types: ["Normal"], + baseStats: { hp: 100, atk: 130, def: 90, spa: 100, spd: 85, spe: 145 }, + abilities: { 0: "Natural Cure" }, + heightm: 4.5, + weightkg: 47.4, + color: "Yellow", + eggGroups: ["Field"], + battleOnly: "Dudunsparce", + }, + electrode: { + inherit: true, + types: ["Electric"], + baseStats: { hp: 60, atk: 50, def: 70, spa: 80, spd: 80, spe: 150 }, + abilities: { 0: "Soundproof", 1: "Static", H: "Aftermath" }, + otherFormes: ["Electrode-Hisui"], + formeOrder: ["Electrode", "Electrode-Hisui"], + }, + // "Different Pokemon" that escapes from Electrode + shakite: { + num: 10001, + name: "Shakite", + types: ["Steel", "Flying"], + baseStats: { hp: 60, atk: 120, def: 150, spa: 50, spd: 100, spe: 20 }, + abilities: { 0: "Aerilate" }, + heightm: 1, + weightkg: 666.6, + color: "Red", + eggGroups: ["Mineral"], + }, + emolga: { + inherit: true, + num: 1038, + name: "Emolga", + types: ["Electric", "Flying"], + baseStats: { hp: 55, atk: 75, def: 60, spa: 75, spd: 60, spe: 103 }, + abilities: { 0: "Speed Boost" }, + otherFormes: ["Emolga-Mega"], + formeOrder: ["Emolga", "Emolga-Mega"], + }, + emolgamega: { + num: 587, + name: "Emolga-Mega", + baseSpecies: "Emolga", + forme: "Mega", + types: ["Electric", "Flying"], + baseStats: { hp: 55, atk: 95, def: 75, spa: 125, spd: 75, spe: 103 }, + abilities: { 0: "Aeolian Drift" }, + heightm: 0.4, + weightkg: 5, + color: "White", + eggGroups: ["Field"], + requiredItem: "Emolgite", + }, + fearow: { + inherit: true, + types: ["Normal", "Flying"], + baseStats: { hp: 65, atk: 90, def: 65, spa: 61, spd: 61, spe: 100 }, + abilities: { 0: "Sniper" }, + otherFormes: ["Fearow-Ferocious"], + formeOrder: ["Fearow", "Fearow-Ferocious"], + }, + fearowferocious: { + num: 22, + name: "Fearow-Ferocious", + baseSpecies: "Fearow", + forme: "Ferocious", + types: ["Fighting", "Flying"], + baseStats: { hp: 45, atk: 60, def: 15, spa: 31, spd: 11, spe: 80 }, + abilities: { 0: "Wonder Guard" }, + heightm: 1.2, + weightkg: 38, + color: "Brown", + eggGroups: ["Flying"], + battleOnly: "Fearow", + }, + flygon: { + inherit: true, + types: ["Ground", "Dragon"], + baseStats: { hp: 80, atk: 80, def: 80, spa: 100, spd: 80, spe: 100 }, + abilities: { 0: "Levitate" }, + otherFormes: ["Flygon-Mega"], + formeOrder: ["Flygon", "Flygon-Mega"], + }, + flygonmega: { + num: 330, + name: "Flygon-Mega", + baseSpecies: "Flygon", + forme: "Mega", + types: ["Ground", "Fairy"], + baseStats: { hp: 80, atk: 105, def: 95, spa: 125, spd: 95, spe: 120 }, + abilities: { 0: "Contrary" }, + heightm: 2, + weightkg: 82, + color: "Green", + eggGroups: ["Bug", "Dragon"], + requiredItem: "Flygonite", + }, + genesect: { + inherit: true, + baseStats: { hp: 71, atk: 120, def: 95, spa: 120, spd: 95, spe: 99 }, + abilities: { 0: "Mega Launcher" }, + otherFormes: [ + "Genesect-Douse", "Genesect-Shock", "Genesect-Burn", "Genesect-Chill", + "Genesect-Core", "Genesect-Rust", "Genesect-Airborne", "Genesect-Luminous", + ], + formeOrder: [ + "Genesect", "Genesect-Douse", "Genesect-Shock", "Genesect-Burn", "Genesect-Chill", + "Genesect-Core", "Genesect-Rust", "Genesect-Airborne", "Genesect-Luminous", + ], + }, + genesectcore: { + num: 649, + name: "Genesect-Core", + baseSpecies: "Genesect", + forme: "Core", + types: ["Bug", "Fighting"], + baseStats: { hp: 71, atk: 120, def: 95, spa: 120, spd: 95, spe: 99 }, + abilities: { 0: "Martialize" }, + heightm: 1.5, + weightkg: 82.5, + color: "Purple", + eggGroups: ["Undiscovered"], + tags: ["Mythical"], + requiredItem: "Burn Drive", + battleOnly: "Genesect-Burn", + }, + genesectrust: { + num: 649, + name: "Genesect-Rust", + baseSpecies: "Genesect", + forme: "Rust", + types: ["Bug", "Poison"], + baseStats: { hp: 71, atk: 120, def: 95, spa: 120, spd: 95, spe: 99 }, + abilities: { 0: "Intoxicate" }, + heightm: 1.5, + weightkg: 82.5, + color: "Purple", + eggGroups: ["Undiscovered"], + tags: ["Mythical"], + requiredItem: "Douse Drive", + battleOnly: "Genesect-Douse", + }, + genesectairborne: { + num: 649, + name: "Genesect-Airborne", + baseSpecies: "Genesect", + forme: "Airborne", + types: ["Bug", "Flying"], + baseStats: { hp: 71, atk: 120, def: 95, spa: 120, spd: 95, spe: 99 }, + abilities: { 0: "Aerilate" }, + heightm: 1.5, + weightkg: 82.5, + color: "Purple", + eggGroups: ["Undiscovered"], + tags: ["Mythical"], + requiredItem: "Shock Drive", + battleOnly: "Genesect-Shock", + }, + genesectluminous: { + num: 649, + name: "Genesect-Luminous", + baseSpecies: "Genesect", + forme: "Luminous", + types: ["Bug", "Fairy"], + baseStats: { hp: 71, atk: 120, def: 95, spa: 120, spd: 95, spe: 99 }, + abilities: { 0: "Pixilate" }, + heightm: 1.5, + weightkg: 82.5, + color: "Purple", + eggGroups: ["Undiscovered"], + tags: ["Mythical"], + requiredItem: "Chill Drive", + battleOnly: "Genesect-Chill", + }, + gliscor: { + inherit: true, + types: ["Ground", "Flying"], + baseStats: { hp: 75, atk: 95, def: 125, spa: 45, spd: 75, spe: 95 }, + abilities: { 0: "Poison Heal" }, + otherFormes: ["Gliscor-Sated"], + formeOrder: ["Gliscor", "Gliscor-Sated"], + }, + gliscorsated: { + num: 472, + name: "Gliscor-Sated", + baseSpecies: "Gliscor", + forme: "Sated", + types: ["Dark", "Ground"], + baseStats: { hp: 75, atk: 125, def: 69, spa: 95, spd: 45, spe: 101 }, + abilities: { 0: "Toxic Boost" }, + heightm: 2, + weightkg: 42.5, + color: "Purple", + eggGroups: ["Bug"], + battleOnly: "Gliscor", + }, + ironvaliant: { + inherit: true, + types: ["Fairy", "Fighting"], + baseStats: { hp: 94, atk: 96, def: 94, spa: 96, spd: 94, spe: 116 }, + abilities: { 0: "Quark Drive" }, + otherFormes: ["Iron Valiant-High-Judge"], + formeOrder: ["Iron Valiant", "Iron Valiant-High-Judge"], + }, + ironvalianthighjudge: { + num: 1006, + name: "Iron Valiant-High-Judge", + baseSpecies: "Iron Valiant", + forme: "High-Judge", + types: ["Fairy", "Fighting"], + baseStats: { hp: 94, atk: 102, def: 106, spa: 102, spd: 106, spe: 108 }, + abilities: { 0: "Evil Eye" }, + heightm: 1.4, + weightkg: 35, + color: "White", + tags: ["Paradox"], + eggGroups: ["Undiscovered"], + battleOnly: "Iron Valiant", + }, + jirachi: { + inherit: true, + types: ["Fairy", "Steel"], + baseStats: { hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100 }, + abilities: { 0: "Serene Grace" }, + otherFormes: ["Jirachi-Harmonic"], + formeOrder: ["Jirachi", "Jirachi-Harmonic"], + }, + jirachiharmonic: { + num: 385, + name: "Jirachi-Harmonic", + baseSpecies: "Jirachi", + forme: "Harmonic", + types: ["Fairy", "Psychic"], + baseStats: { hp: 100, atk: 105, def: 75, spa: 115, spd: 85, spe: 120 }, + abilities: { 0: "Prism Armor" }, + heightm: 0.3, + weightkg: 1.1, + color: "Yellow", + tags: ["Mythical"], + eggGroups: ["Undiscovered"], + battleOnly: "Jirachi", + }, + kecleon: { + inherit: true, + baseStats: { hp: 60, atk: 90, def: 70, spa: 60, spd: 120, spe: 85 }, + abilities: { 0: "Protean" }, + otherFormes: ["Kecleon-Volcanic", "Kecleon-Wild", "Kecleon-Luminous", "Kecleon-Storybook", "Kecleon-Phasic", "Kecleon-Ruffian"], + formeOrder: ["Kecleon", "Kecleon-Volcanic", "Kecleon-Wild", "Kecleon-Luminous", "Kecleon-Storybook", "Kecleon-Phasic", "Kecleon-Ruffian"], + }, + kecleonvolcanic: { + num: 352, + name: "Kecleon-Volcanic", + baseSpecies: "Kecleon", + forme: "Volcanic", + types: ["Fire", "Rock", "Ground"], + baseStats: { hp: 60, atk: 90, def: 120, spa: 60, spd: 85, spe: 70 }, + abilities: { 0: "Volcanic Palette" }, + heightm: 1, + weightkg: 22, + color: "Green", + eggGroups: ["Field"], + battleOnly: "Kecleon", + }, + kecleonwild: { + num: 352, + name: "Kecleon-Wild", + baseSpecies: "Kecleon", + forme: "Wild", + types: ["Grass", "Bug", "Poison"], + baseStats: { hp: 60, atk: 120, def: 90, spa: 60, spd: 70, spe: 85 }, + abilities: { 0: "Wild Palette" }, + heightm: 1, + weightkg: 22, + color: "Green", + eggGroups: ["Field"], + battleOnly: "Kecleon", + }, + kecleonluminous: { + num: 352, + name: "Kecleon-Luminous", + baseSpecies: "Kecleon", + forme: "Luminous", + types: ["Electric", "Fairy", "Psychic"], + baseStats: { hp: 60, atk: 85, def: 70, spa: 60, spd: 90, spe: 120 }, + abilities: { 0: "Luminious Palette" }, + heightm: 1, + weightkg: 22, + color: "Green", + eggGroups: ["Field"], + battleOnly: "Kecleon", + }, + kecleonstorybook: { + num: 352, + name: "Kecleon-Storybook", + baseSpecies: "Kecleon", + forme: "Storybook", + types: ["Ghost", "Dragon", "Steel"], + baseStats: { hp: 60, atk: 85, def: 120, spa: 60, spd: 90, spe: 70 }, + abilities: { 0: "Storybook Palette" }, + heightm: 1, + weightkg: 22, + color: "Green", + eggGroups: ["Field"], + battleOnly: "Kecleon", + }, + kecleonphasic: { + num: 352, + name: "Kecleon-Phasic", + baseSpecies: "Kecleon", + forme: "Phasic", + types: ["Ice", "Water", "Flying"], + baseStats: { hp: 60, atk: 90, def: 70, spa: 60, spd: 85, spe: 120 }, + abilities: { 0: "Phasic Palette" }, + heightm: 1, + weightkg: 22, + color: "Green", + eggGroups: ["Field"], + battleOnly: "Kecleon", + }, + kecleonruffian: { + num: 352, + name: "Kecleon-Ruffian", + baseSpecies: "Kecleon", + forme: "Ruffian", + types: ["Normal", "Fighting", "Dark"], + baseStats: { hp: 60, atk: 120, def: 85, spa: 60, spd: 70, spe: 90 }, + abilities: { 0: "Ruffian Palette" }, + heightm: 1, + weightkg: 22, + color: "Green", + eggGroups: ["Field"], + battleOnly: "Kecleon", + }, + kommoo: { + inherit: true, + types: ["Dragon", "Fighting"], + baseStats: { hp: 75, atk: 110, def: 125, spa: 100, spd: 105, spe: 85 }, + abilities: { 0: "Soundproof" }, + otherFormes: ["Kommo-o-Totem", "Kommo-o-Hard-Rock"], + formeOrder: ["Kommo-o", "Kommo-o-Totem", "Kommo-o-Hard-Rock"], + }, + kommoohardrock: { + num: 784, + name: "Kommo-o-Hard-Rock", + baseSpecies: "Kommo-o", + forme: "Hard-Rock", + types: ["Dragon", "Fighting", "Rock"], + baseStats: { hp: 75, atk: 110, def: 125, spa: 100, spd: 105, spe: 85 }, + abilities: { 0: "Backbeat" }, + heightm: 1.6, + weightkg: 78.2, + color: "Gray", + eggGroups: ["Dragon"], + battleOnly: "Kommo-o", + }, + landorustherian: { + inherit: true, + }, + landorustherianancestral: { + num: 645, + name: "Landorus-Therian-Ancestral", + baseSpecies: "Landorus", + forme: "Therian-Ancestral", + types: ["Ground", "Flying"], + baseStats: { hp: 89, atk: 110, def: 90, spa: 106, spd: 80, spe: 125 }, + abilities: { 0: "Download" }, + heightm: 1.3, + weightkg: 68, + color: "Brown", + eggGroups: ["Undiscovered"], + requiredMove: "Generational De-Evolution", + battleOnly: "Landorus-Therian", + }, + landorus: { + inherit: true, + types: ["Ground", "Flying"], + baseStats: { hp: 89, atk: 125, def: 90, spa: 115, spd: 80, spe: 101 }, + abilities: { 0: "Sheer Force" }, + otherFormes: ["Landorus-Therian", "Landorus-Ancestral", "Landorus-Therian-Ancestral"], + formeOrder: ["Landorus", "Landorus-Therian", "Landorus-Ancestral", "Landorus-Therian-Ancestral"], + }, + landorusancestral: { + num: 645, + name: "Landorus-Ancestral", + baseSpecies: "Landorus", + forme: "Ancestral", + types: ["Ground", "Flying"], + baseStats: { hp: 89, atk: 106, def: 90, spa: 110, spd: 80, spe: 125 }, + abilities: { 0: "Download" }, + heightm: 1.5, + weightkg: 68, + color: "Brown", + tags: ["Sub-Legendary"], + eggGroups: ["Undiscovered"], + requiredMove: "Generational De-Evolution", + battleOnly: "Landorus", + }, + petilil: { + inherit: true, + evos: ["Lilligant"], + }, + lilligant: { + inherit: true, + types: ["Grass", "Fighting"], + baseStats: { hp: 70, atk: 105, def: 75, spa: 50, spd: 75, spe: 105 }, + abilities: { 0: "Dancer" }, + }, + lilliganthisui: { + num: 549, + name: "Lilligant-Hisui", + baseSpecies: "Lilligant", + forme: "Hisui", + types: ["Grass", "Fairy"], + baseStats: { hp: 70, atk: 60, def: 60, spa: 110, spd: 60, spe: 120 }, + abilities: { 0: "Drought" }, + heightm: 1.2, + weightkg: 19.2, + color: "Green", + eggGroups: ["Grass"], + battleOnly: "Lilligant", + }, + lucario: { + inherit: true, + types: ["Fighting", "Steel"], + baseStats: { hp: 70, atk: 110, def: 70, spa: 115, spd: 70, spe: 90 }, + abilities: { 0: "Inner Focus" }, + otherFormes: ["Lucario-Mega", "Lucario-Aura Bond"], + formeOrder: ["Lucario", "Lucario-Mega", "Lucario-Aura Bond"], + }, + lucarioaurabond: { + num: 448, + name: "Lucario-Aura Bond", + baseSpecies: "Lucario", + forme: "Aura Bond", + types: ["Fighting", "Steel"], + baseStats: { hp: 70, atk: 120, def: 70, spa: 120, spd: 105, spe: 110 }, + abilities: { 0: "Aura Partner" }, + heightm: 1.2, + weightkg: 54, + color: "Blue", + eggGroups: ["Field", "Human-Like"], + requiredAbility: "Aura Partner", + battleOnly: "Lucario", + }, + luvdisc: { + inherit: true, + types: ["Water"], + baseStats: { hp: 43, atk: 30, def: 55, spa: 40, spd: 65, spe: 97 }, + abilities: { 0: "Trying My Best" }, + otherFormes: ["Luvdisc-Heartbreak"], + formeOrder: ["Luvdisc", "Luvdisc-Heartbreak"], + }, + luvdischeartbreak: { + num: 370, + name: "Luvdisc-Heartbreak", + baseSpecies: "Luvdisc", + forme: "Heartbreak", + types: ["Water", "Fairy"], + baseStats: { hp: 43, atk: 120, def: 85, spa: 60, spd: 95, spe: 127 }, + abilities: { 0: "Pixilate" }, + heightm: 0.6, + weightkg: 8.7, + color: "Pink", + eggGroups: ["Water 2"], + requiredAbility: "Trying My Best", + battleOnly: "Luvdisc", + }, + luxray: { + inherit: true, + types: ["Electric", "Steel"], + baseStats: { hp: 80, atk: 120, def: 79, spa: 95, spd: 79, spe: 70 }, + abilities: { 0: "Overcharged" }, + otherFormes: ["Luxray-Conductive"], + formeOrder: ["Luxray", "Luxray-Conductive"], + }, + luxrayconductive: { + num: 405, + name: "Luxray-Conductive", + baseSpecies: "Luxray", + forme: "Conductive", + types: ["Electric", "Steel"], + baseStats: { hp: 80, atk: 140, def: 40, spa: 73, spd: 40, spe: 150 }, + abilities: { 0: "Overcharged" }, + heightm: 1.4, + weightkg: 42, + color: "Blue", + eggGroups: ["Field"], + battleOnly: "Luxray", + }, + magcargo: { + inherit: true, + types: ["Fire", "Rock"], + baseStats: { hp: 60, atk: 50, def: 120, spa: 90, spd: 80, spe: 30 }, + abilities: { 0: "Flame Body" }, + otherFormes: ["Magcargo-Fractured"], + formeOrder: ["Magcargo", "Magcargo-Fractured"], + }, + magcargofractured: { + num: 219, + name: "Magcargo-Fractured", + baseSpecies: "Magcargo", + forme: "Fractured", + types: ["Fire", "Rock"], + baseStats: { hp: 60, atk: 75, def: 105, spa: 110, spd: 145, spe: 35 }, + abilities: { 0: "Regenerator" }, + heightm: 0.8, + weightkg: 55, + color: "Red", + eggGroups: ["Amorphous"], + battleOnly: "Magcargo", + }, + mamoswine: { + inherit: true, + types: ["Ice", "Ground"], + baseStats: { hp: 110, atk: 130, def: 80, spa: 70, spd: 60, spe: 80 }, + abilities: { 0: "Thick Fat" }, + otherFormes: ["Mamoswine-Overflow"], + formeOrder: ["Mamoswine", "Mamoswine-Overflow"], + }, + mamoswineoverflow: { + num: 473, + name: "Mamoswine-Overflow", + baseSpecies: "Mamoswine", + forme: "Overflow", + types: ["Ice", "Ghost"], + baseStats: { hp: 110, atk: 145, def: 60, spa: 85, spd: 80, spe: 150 }, + abilities: { 0: "Regenerator" }, + heightm: 2.7, + weightkg: 111, + color: "Brown", + eggGroups: ["Field"], + requiredItem: "Mysterious Tusk", + battleOnly: "Mamoswine", + }, + mesprit: { + inherit: true, + types: ["Psychic"], + baseStats: { hp: 80, atk: 105, def: 105, spa: 105, spd: 105, spe: 80 }, + abilities: { 0: "Levitate" }, + otherFormes: ["Mesprit-Rampaging"], + formeOrder: ["Mesprit", "Mesprit-Rampaging"], + }, + mespritrampaging: { + num: 481, + name: "Mesprit-Rampaging", + baseSpecies: "Mesprit", + forme: "Rampaging", + types: ["Psychic", "Dark"], + baseStats: { hp: 80, atk: 100, def: 140, spa: 115, spd: 140, spe: 100 }, + abilities: { 0: "Rampage" }, + heightm: 0.3, + weightkg: 0.3, + color: "Pink", + tags: ["Sub-Legendary"], + eggGroups: ["Undiscovered"], + battleOnly: "Mesprit", + }, + mewtwo: { + inherit: true, + types: ["Psychic", "Dark"], + baseStats: { hp: 106, atk: 110, def: 90, spa: 154, spd: 90, spe: 130 }, + abilities: { 0: "Unnerve" }, + otherFormes: ["Mewtwo-Mega-X", "Mewtwo-Mega-Y", "Mewtwo-Evil-Scary"], + formeOrder: ["Mewtwo", "Mewtwo-Mega-X", "Mewtwo-Mega-Y", "Mewtwo-Evil-Scary"], + }, + mewtwoevilscary: { + num: 150, + name: "Mewtwo-Evil-Scary", + baseSpecies: "Mewtwo", + forme: "Evil-Scary", + types: ["Dark"], + baseStats: { hp: 106, atk: 150, def: 70, spa: 194, spd: 120, spe: 140 }, + abilities: { 0: "Insomnia" }, + heightm: 2, + weightkg: 122, + color: "Purple", + eggGroups: ["Undiscovered"], + tags: ["Restricted Legendary"], + battleOnly: "Mewtwo", + }, + octillery: { + inherit: true, + types: ["Water"], + baseStats: { hp: 100, atk: 105, def: 100, spa: 105, spd: 100, spe: 45 }, + abilities: { 0: "Guided Missiles" }, + otherFormes: ["Octillery-Sharpshooter"], + formeOrder: ["Octillery", "Octillery-Sharpshooter"], + }, + octillerysharpshooter: { + num: 224, + name: "Octillery-Sharpshooter", + baseSpecies: "Octillery", + forme: "Sharpshooter", + types: ["Water", "Steel"], + baseStats: { hp: 100, atk: 105, def: 110, spa: 130, spd: 110, spe: 45 }, + abilities: { 0: "Focused Fire" }, + heightm: 0.9, + weightkg: 28.5, + color: "Red", + eggGroups: ["Water 1", "Water 2"], + battleOnly: "Octillery", + }, + ogerpon: { + inherit: true, + otherFormes: [ + "Ogerpon-Wellspring", "Ogerpon-Hearthflame", "Ogerpon-Cornerstone", "Ogerpon-Teal-Tera", "Ogerpon-Wellspring-Tera", + "Ogerpon-Hearthflame-Tera", "Ogerpon-Cornerstone-Tera", "Ogerpon-Pixiedust", "Ogerpon-Pixiedust-Tera", + ], + formeOrder: [ + "Ogerpon", "Ogerpon-Wellspring", "Ogerpon-Hearthflame", "Ogerpon-Cornerstone", "Ogerpon-Teal-Tera", "Ogerpon-Wellspring-Tera", + "Ogerpon-Hearthflame-Tera", "Ogerpon-Cornerstone-Tera", "Ogerpon-Pixiedust", "Ogerpon-Pixiedust-Tera", + ], + }, + ogerponpixiedust: { + num: 1017, + name: "Ogerpon-Pixiedust", + baseSpecies: "Ogerpon", + forme: "Pixiedust", + types: ["Grass", "Fairy"], + baseStats: { hp: 80, atk: 120, def: 84, spa: 60, spd: 96, spe: 110 }, + abilities: { 0: "Shield Dust" }, + heightm: 1.2, + weightkg: 39.8, + color: "Green", + tags: ["Sub-Legendary"], + eggGroups: ["Undiscovered"], + requiredItem: "Pixiedust Mask", + changesFrom: "Ogerpon", + requiredTeraType: "Fairy", + }, + ogerponpixiedusttera: { + num: 1017, + name: "Ogerpon-Pixiedust-Tera", + baseSpecies: "Ogerpon", + forme: "Pixiedust-Tera", + types: ["Grass", "Fairy"], + gender: "F", + baseStats: { hp: 80, atk: 120, def: 84, spa: 60, spd: 96, spe: 110 }, + abilities: { 0: "Embody Aspect (Pixiedust)" }, + heightm: 1.2, + weightkg: 39.8, + color: "Pink", + eggGroups: ["Undiscovered"], + requiredItem: "Pixiedust Mask", + battleOnly: "Ogerpon-Pixiedust", + requiredTeraType: "Fairy", + }, + parasect: { + inherit: true, + types: ["Bug", "Grass"], + baseStats: { hp: 60, atk: 95, def: 80, spa: 60, spd: 80, spe: 30 }, + abilities: { 0: "Effect Spore" }, + otherFormes: ["Parasect-Wicked"], + formeOrder: ["Parasect", "Parasect-Wicked"], + }, + parasectwicked: { + num: 47, + name: "Parasect-Wicked", + baseSpecies: "Parasect", + forme: "Wicked", + types: ["Bug", "Dark"], + baseStats: { hp: 80, atk: 110, def: 70, spa: 115, spd: 65, spe: 111 }, + abilities: { 0: "Shroom n Doom" }, + heightm: 1, + weightkg: 29.5, + color: "Red", + eggGroups: ["Bug", "Grass"], + requiredItem: "Dreamy Mushroom", + battleOnly: "Parasect", + }, + pecharunt: { + inherit: true, + types: ["Poison", "Ghost"], + baseStats: { hp: 88, atk: 88, def: 88, spa: 88, spd: 88, spe: 160 }, + abilities: { 0: "Poison Puppeteer" }, + otherFormes: ["Pecharunt-Puppetmaster"], + formeOrder: ["Pecharunt", "Pecharunt-Puppetmaster"], + }, + pecharuntpuppetmaster: { + num: 1025, + name: "Pecharunt-Puppetmaster", + baseSpecies: "Pecharunt", + forme: "Puppetmaster", + types: ["Poison", "Ghost"], + baseStats: { hp: 88, atk: 160, def: 88, spa: 88, spd: 88, spe: 88 }, + abilities: { 0: "Intimidate" }, + heightm: 0.3, + weightkg: 0.3, + color: "Purple", + tags: ["Mythical"], + eggGroups: ["Undiscovered"], + battleOnly: "Pecharunt", + }, + rayquaza: { + inherit: true, + types: ["Dragon", "Flying"], + baseStats: { hp: 105, atk: 150, def: 90, spa: 150, spd: 90, spe: 95 }, + abilities: { 0: "Primal Shackle" }, + otherFormes: ["Rayquaza-Mega", "Rayquaza-Untethered"], + formeOrder: ["Rayquaza", "Rayquaza-Mega", "Rayquaza-Untethered"], + }, + rayquazauntethered: { + num: 384, + name: "Rayquaza-Untethered", + baseSpecies: "Rayquaza", + forme: "Untethered", + types: ["Dragon", "Stellar"], + baseStats: { hp: 100, atk: 165, def: 95, spa: 165, spd: 95, spe: 150 }, + abilities: { 0: "Beast Boost" }, + heightm: 7, + weightkg: 206.5, + color: "Green", + tags: ["Restricted Legendary"], + eggGroups: ["Undiscovered"], + battleOnly: "Rayquaza", + }, + regigigas: { + inherit: true, + types: ["Normal"], + baseStats: { hp: 110, atk: 160, def: 110, spa: 80, spd: 110, spe: 100 }, + abilities: { 0: "Slow Start" }, + otherFormes: ["Regigigas-Colossal"], + formeOrder: ["Regigigas", "Regigigas-Colossal"], + }, + regigigascolossal: { + num: 486, + name: "Regigigas-Colossal", + baseSpecies: "Regigigas", + forme: "Colossal", + types: ["Normal", "Fighting"], + baseStats: { hp: 130, atk: 130, def: 130, spa: 130, spd: 130, spe: 70 }, + abilities: { 0: "Martialize" }, + heightm: 3.7, + weightkg: 999.9, + color: "White", + tags: ["Sub-Legendary"], + eggGroups: ["Undiscovered"], + battleOnly: "Regigigas", + }, + rhyperior: { + inherit: true, + types: ["Rock", "Ground"], + baseStats: { hp: 125, atk: 140, def: 130, spa: 55, spd: 55, spe: 40 }, + abilities: { 0: "Solid Rock" }, + otherFormes: ["Rhyperior-Adversity"], + formeOrder: ["Rhyperior", "Rhyperior-Adversity"], + }, + rhyperioradversity: { + num: 464, + name: "Rhyperior-Adversity", + baseSpecies: "Rhyperior", + forme: "Adversity", + types: ["Rock", "Ground"], + baseStats: { hp: 125, atk: 140, def: 130, spa: 55, spd: 75, spe: 80 }, + abilities: { 0: "Emergency Cannon" }, + heightm: 2.4, + weightkg: 282.8, + color: "Gray", + eggGroups: ["Monster", "Field"], + battleOnly: "Rhyperior", + }, + samurott: { + inherit: true, + types: ["Water"], + baseStats: { hp: 95, atk: 100, def: 85, spa: 108, spd: 70, spe: 70 }, + abilities: { 0: "Supreme Overlord" }, + otherFormes: ["Samurott-Hisui", "Samurott-Overlord"], + formeOrder: ["Samurott", "Samurott-Hisui", "Samurott-Overlord"], + }, + samurottoverlord: { + num: 503, + name: "Samurott-Overlord", + baseSpecies: "Samurott", + forme: "Overlord", + types: ["Water", "Fighting"], + baseStats: { hp: 95, atk: 115, def: 70, spa: 115, spd: 70, spe: 85 }, + abilities: { 0: "Supreme Overlord" }, + heightm: 1.5, + weightkg: 58.2, + color: "Blue", + eggGroups: ["Field"], + battleOnly: "Samurott", + }, + shayminsky: { + inherit: true, + types: ["Grass", "Flying"], + baseStats: { hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100 }, + abilities: { 0: "Serene Grace" }, + }, + shaymin: { + inherit: true, + types: ["Grass"], + baseStats: { hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100 }, + abilities: { 0: "Flower Veil" }, + }, + shedinja: { + inherit: true, + types: ["Bug", "Ghost"], + baseStats: { hp: 80, atk: 90, def: 90, spa: 30, spd: 90, spe: 40 }, + maxHP: undefined, + abilities: { 0: "Wonder Guard" }, + otherFormes: ["Shedinja-Escaped"], + formeOrder: ["Shedinja", "Shedinja-Escaped"], + }, + shedinjaescaped: { + num: 292, + name: "Shedinja-Escaped", + baseSpecies: "Shedinja", + forme: "Escaped", + types: ["Ghost", "Flying"], + baseStats: { hp: 80, atk: 90, def: 30, spa: 90, spd: 30, spe: 160 }, + abilities: { 0: "Wonder Guard" }, + heightm: 0.8, + weightkg: 1.2, + color: "Brown", + eggGroups: ["Mineral"], + requiredAbility: "Wonder Guard", + battleOnly: "Shedinja", + }, + simisear: { + inherit: true, + types: ["Fire"], + baseStats: { hp: 75, atk: 98, def: 63, spa: 98, spd: 63, spe: 101 }, + abilities: { 0: "Blaze" }, + otherFormes: ["Simisear-Ultra"], + formeOrder: ["Simisear", "Simisear-Ultra"], + }, + simisearultra: { + num: 514, + name: "Simisear-Ultra", + baseSpecies: "Simisear", + forme: "Ultra", + types: ["Fire", "Electric"], + baseStats: { hp: 75, atk: 132, def: 73, spa: 132, spd: 73, spe: 117 }, + abilities: { 0: "Galvanize" }, + heightm: 1.8, + weightkg: 75, + color: "Red", + eggGroups: ["Field"], + requiredItem: "Ultrasimisearium Z", + battleOnly: "Simisear", + }, + slowking: { + inherit: true, + types: ["Water", "Psychic"], + baseStats: { hp: 95, atk: 75, def: 80, spa: 100, spd: 110, spe: 30 }, + abilities: { 0: "Regenerator" }, + otherFormes: ["Slowking-Galar", "Slowking-Frostking"], + formeOrder: ["Slowking", "Slowking-Galar", "Slowking-Frostking"], + }, + slowkingfrostking: { + num: 199, + name: "Slowking-Frostking", + baseSpecies: "Slowking", + forme: "Frostking", + types: ["Ice", "Poison"], + baseStats: { hp: 95, atk: 40, def: 100, spa: 110, spd: 115, spe: 30 }, + abilities: { 0: "Regenerator" }, + heightm: 2, + weightkg: 79.5, + color: "Pink", + eggGroups: ["Monster", "Water 1"], + requiredMove: "Chilly Reception", + battleOnly: "Slowking", + }, + stakataka: { + inherit: true, + types: ["Rock", "Steel"], + baseStats: { hp: 61, atk: 131, def: 211, spa: 53, spd: 101, spe: 13 }, + abilities: { 0: "Stack Shift" }, + otherFormes: ["Stakataka-Missile"], + formeOrder: ["Stakataka", "Stakataka-Missile"], + }, + stakatakamissile: { + num: 805, + name: "Stakataka-Missile", + baseSpecies: "Stakataka", + forme: "Missile", + types: ["Rock", "Steel"], + baseStats: { hp: 61, atk: 161, def: 13, spa: 53, spd: 71, spe: 211 }, + abilities: { 0: "Interdimensional Missile" }, + heightm: 5.5, + weightkg: 820, + color: "Gray", + tags: ["Ultra Beast"], + eggGroups: ["Undiscovered"], + requiredAbility: "Stack Shift", + battleOnly: "Stakataka", + }, + sudowoodo: { + inherit: true, + types: ["Grass", "Fighting"], + baseStats: { hp: 100, atk: 100, def: 115, spa: 30, spd: 100, spe: 30 }, + abilities: { 0: "Rock Head" }, + otherFormes: ["Sudowoodo-Nopseudo"], + formeOrder: ["Sudowoodo", "Sudowoodo-Nopseudo"], + }, + sudowoodonopseudo: { + num: 185, + name: "Sudowoodo-Nopseudo", + baseSpecies: "Sudowoodo", + forme: "Nopseudo", + types: ["Grass"], + baseStats: { hp: 250, atk: 165, def: 30, spa: 55, spd: 30, spe: 10 }, + abilities: { 0: "True Eden" }, + heightm: 16.2, + weightkg: 538, + color: "Brown", + eggGroups: ["Mineral"], + battleOnly: "Sudowoodo", + }, + sunflora: { + inherit: true, + types: ["Grass"], + baseStats: { hp: 75, atk: 75, def: 55, spa: 105, spd: 85, spe: 30 }, + abilities: { 0: "Chlorophyll" }, + otherFormes: ["Sunflora-Wilted"], + formeOrder: ["Sunflora", "Sunflora-Wilted"], + }, + sunflorawilted: { + num: 192, + name: "Sunflora-Wilted", + baseSpecies: "Sunflora", + forme: "Wilted", + types: ["Grass", "Poison"], + baseStats: { hp: 105, atk: 75, def: 105, spa: 135, spd: 105, spe: 100 }, + abilities: { 0: "Wither" }, + heightm: 0.8, + weightkg: 8.5, + color: "Yellow", + eggGroups: ["Grass"], + battleOnly: "Sunflora", + }, + sylveon: { + inherit: true, + types: ["Fairy"], + baseStats: { hp: 95, atk: 65, def: 65, spa: 110, spd: 130, spe: 60 }, + abilities: { 0: "Pixilate" }, + otherFormes: ["Sylveon-Lumineon"], + formeOrder: ["Sylveon", "Sylveon-Lumineon"], + }, + sylveonlumineon: { + num: 700, + name: "Sylveon-Lumineon", + baseSpecies: "Sylveon", + forme: "Lumineon", + types: ["Fairy", "Psychic"], + baseStats: { hp: 95, atk: 65, def: 85, spa: 130, spd: 130, spe: 95 }, + abilities: { 0: "Fairy Aura" }, + heightm: 1, + weightkg: 23.5, + color: "Pink", + eggGroups: ["Field"], + requiredMove: "Ribbon Shift", + battleOnly: "Sylveon", + }, + talonflame: { + inherit: true, + types: ["Fire", "Flying"], + baseStats: { hp: 79, atk: 111, def: 76, spa: 74, spd: 74, spe: 136 }, + abilities: { 0: "Gale Wings" }, + otherFormes: ["Talonflame-Tempest"], + formeOrder: ["Talonflame", "Talonflame-Tempest"], + }, + talonflametempest: { + num: 663, + name: "Talonflame-Tempest", + baseSpecies: "Talonflame", + forme: "Tempest", + types: ["Fire", "Flying"], + baseStats: { hp: 79, atk: 130, def: 76, spa: 105, spd: 74, spe: 143 }, + abilities: { 0: "Tough Wings" }, + heightm: 1.2, + weightkg: 24.5, + color: "Red", + eggGroups: ["Flying"], + battleOnly: "Talonflame", + }, + torterra: { + inherit: true, + types: ["Grass", "Ground"], + baseStats: { hp: 110, atk: 114, def: 130, spa: 75, spd: 60, spe: 36 }, + abilities: { 0: "Shell Armor" }, + otherFormes: ["Torterra-Old"], + formeOrder: ["Torterra", "Torterra-Old"], + }, + torterraold: { + num: 389, + name: "Torterra-Old!", + baseSpecies: "Torterra", + forme: "Old", + types: ["Grass", "Steel"], + baseStats: { hp: 110, atk: 114, def: 55, spa: 75, spd: 55, spe: 116 }, + abilities: { 0: "Head-On" }, + heightm: 2.2, + weightkg: 310, + color: "Green", + eggGroups: ["Monster", "Grass"], + battleOnly: "Torterra", + }, + trubbish: { + inherit: true, + types: ["Poison"], + baseStats: { hp: 100, atk: 95, def: 85, spa: 60, spd: 82, spe: 100 }, + abilities: { 0: "Stench" }, + otherFormes: ["Trubbish-Mega-Dragon"], + formeOrder: ["Trubbish", "Trubbish-Mega-Dragon"], + }, + trubbishmegadragon: { + num: 568, + name: "Trubbish-Mega-Dragon", + baseSpecies: "Trubbish", + forme: "Mega-Dragon", + types: ["Poison", "Flying"], + baseStats: { hp: 80, atk: 55, def: 102, spa: 80, spd: 130, spe: 90 }, + abilities: { 0: "Pure Power" }, + heightm: 0.6, + weightkg: 31, + color: "Green", + eggGroups: ["Mineral"], + requiredAbility: "Stench", + battleOnly: "Trubbish", + }, + victini: { + inherit: true, + types: ["Fire", "Psychic"], + baseStats: { hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100 }, + abilities: { 0: "Victory Star" }, + otherFormes: ["Victini-Victorious"], + formeOrder: ["Victini", "Victini-Victorious"], + }, + victinivictorious: { + num: 494, + name: "Victini-Victorious", + baseSpecies: "Victini", + forme: "Victorious", + types: ["Fire", "Psychic"], + baseStats: { hp: 100, atk: 120, def: 70, spa: 120, spd: 70, spe: 120 }, + abilities: { 0: "Victory Finale" }, + heightm: 0.4, + weightkg: 33.3, + color: "Yellow", + tags: ["Mythical"], + eggGroups: ["Undiscovered"], + battleOnly: "Victini", + }, + volcanion: { + inherit: true, + types: ["Fire", "Water"], + baseStats: { hp: 80, atk: 110, def: 120, spa: 130, spd: 90, spe: 70 }, + abilities: { 0: "Water Absorb" }, + otherFormes: ["Volcanion-Surge"], + formeOrder: ["Volcanion", "Volcanion-Surge"], + }, + volcanionsurge: { + num: 721, + name: "Volcanion-Surge", + baseSpecies: "Volcanion", + forme: "Surge", + types: ["Fire", "Steel"], + baseStats: { hp: 80, atk: 85, def: 105, spa: 145, spd: 85, spe: 100 }, + abilities: { 0: "Supercritical" }, + heightm: 1.7, + weightkg: 195, + color: "Brown", + tags: ["Mythical"], + eggGroups: ["Undiscovered"], + battleOnly: "Volcanion", + }, + volcarona: { + inherit: true, + types: ["Fire", "Bug"], + baseStats: { hp: 85, atk: 60, def: 65, spa: 135, spd: 105, spe: 100 }, + abilities: { 0: "Flame Body" }, + otherFormes: ["Volcarona-Solstice", "Volcarona-Radiant"], + formeOrder: ["Volcarona", "Volcanion-Solstice", "Volcarona-Radaint"], + }, + volcaronasolstice: { + num: 637, + name: "Volcarona-Solstice", + baseSpecies: "Volcarona", + forme: "Solstice", + types: ["Fairy", "Fire"], + baseStats: { hp: 85, atk: 60, def: 85, spa: 105, spd: 135, spe: 80 }, + abilities: { 0: "Flame Body" }, + heightm: 1.6, + weightkg: 46, + color: "White", + eggGroups: ["Bug"], + requiredMove: "Morning Sun", + battleOnly: "Volcarona", + }, + volcaronaradiant: { + num: 637, + name: "Volcarona-Radiant", + baseSpecies: "Volcarona", + forme: "Radiant", + types: ["Fire", "Psychic"], + baseStats: { hp: 85, atk: 70, def: 75, spa: 150, spd: 105, spe: 115 }, + abilities: { 0: "Desolate Land" }, + heightm: 1.6, + weightkg: 46, + color: "White", + eggGroups: ["Bug"], + requiredMove: "Fiery Dance", + battleOnly: "Volcarona", + }, + weavile: { + inherit: true, + types: ["Dark", "Ice"], + baseStats: { hp: 70, atk: 100, def: 85, spa: 45, spd: 85, spe: 125 }, + abilities: { 0: "Growing Bitterness" }, + otherFormes: ["Weavile-Frost"], + formeOrder: ["Weavile", "Weavile-Frost"], + }, + weavilefrost: { + num: 461, + name: "Weavile-Frost", + baseSpecies: "Weavile", + forme: "Frost", + types: ["Dark", "Ice"], + baseStats: { hp: 70, atk: 100, def: 85, spa: 45, spd: 85, spe: 125 }, + abilities: { 0: "Bitterness" }, + heightm: 1.1, + weightkg: 34, + color: "Black", + eggGroups: ["Field"], + requiredAbility: "Growing Bitterness", + battleOnly: "Weavile", + }, + wyrdeer: { + inherit: true, + types: ["Ice", "Psychic"], + baseStats: { hp: 103, atk: 80, def: 72, spa: 115, spd: 90, spe: 65 }, + abilities: { 0: "Snow Warning" }, + otherFormes: ["Wyrdeer-Snowblind"], + formeOrder: ["Wyrdeer", "Wyrdeer-Snowblind"], + }, + wyrdeersnowblind: { + num: 899, + name: "Wyrdeer-Snowblind", + baseSpecies: "Wyrdeer", + forme: "Snowblind", + types: ["Ice", "Psychic"], + baseStats: { hp: 103, atk: 80, def: 72, spa: 130, spd: 90, spe: 100 }, + abilities: { 0: "Heart of Cold" }, + heightm: 1.8, + weightkg: 105.1, + color: "Gray", + eggGroups: ["Field"], + battleOnly: "Wyrdeer", + }, + zarude: { + inherit: true, + types: ["Dark", "Grass"], + baseStats: { hp: 105, atk: 120, def: 105, spa: 70, spd: 95, spe: 105 }, + abilities: { 0: "Natural Cure" }, + otherFormes: ["Zarude-Dada", "Zarude-Alchemist"], + formeOrder: ["Zarude", "Zarude-Dada", "Zarude-Alchemist"], + }, + zarudedada: { + inherit: true, + types: ["Dark", "Grass"], + baseStats: { hp: 105, atk: 120, def: 105, spa: 70, spd: 95, spe: 105 }, + abilities: { 0: "Natural Cure" }, + }, + zarudealchemist: { + num: 893, + name: "Zarude-Alchemist", + baseSpecies: "Zarude", + forme: "Alchemist", + types: ["Dark", "Grass"], + baseStats: { hp: 105, atk: 70, def: 110, spa: 115, spd: 110, spe: 115 }, + abilities: { 0: "Herbal Elixir" }, + heightm: 1.8, + weightkg: 70, + color: "Black", + eggGroups: ["Undiscovered"], + battleOnly: ["Zarude", "Zarude-Dada"], + }, + zeraora: { + inherit: true, + types: ["Electric", "Fighting"], + baseStats: { hp: 88, atk: 112, def: 75, spa: 102, spd: 80, spe: 143 }, + abilities: { 0: "Electromorphosis" }, + otherFormes: ["Zeraora-Big"], + formeOrder: ["Zeraora", "Zeraora-Big"], + }, + zeraorabig: { + num: 807, + name: "Zeraora-Big", + baseSpecies: "Zeraora", + forme: "Big", + types: ["Electric", "Fighting"], + baseStats: { hp: 88, atk: 122, def: 90, spa: 102, spd: 110, spe: 143 }, + abilities: { 0: "Electric Surge" }, + heightm: 1.5, + weightkg: 44.5, + color: "Yellow", + tags: ["Mythical"], + eggGroups: ["Undiscovered"], + battleOnly: "Zeraora", + }, + // Advent mons now + strobite: { + num: 2000, + name: "Strobite", + types: ["Electric"], + baseStats: { hp: 100, atk: 130, def: 110, spa: 50, spd: 70, spe: 65 }, + abilities: { 0: "Lightning Rod", 1: "Strong Jaw", H: "Intimidate" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + xurkitree: { + inherit: true, + otherFormes: ["Xurkitree-Sinnoh"], + formeOrder: ["Xurkitree", "Zeraora-Sinnoh"], + }, + xurkitreesinnoh: { + num: 796, + name: "Xurkitree-Sinnoh", + baseSpecies: "Xurkitree", + forme: "Sinnoh", + types: ["Electric", "Fairy"], + baseStats: { hp: 83, atk: 67, def: 89, spa: 127, spd: 103, spe: 71 }, + abilities: { 0: "Lighting Rod", 1: "Tangling Hair", H: "Sap Sipper" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + sandta: { + num: 2002, + name: "Sandta", + types: ["Ground", "Water"], + baseStats: { hp: 110, atk: 75, def: 85, spa: 95, spd: 85, spe: 75 }, + abilities: { 0: "Water Compaction", 1: "Water Veil", H: "Water Absorb" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + eiscue: { + inherit: true, + otherFormes: ["Eiscue-Noice", "Eiscue-Snowcone", "Eiscue-Snowcone-Nosnow"], + formeOrder: ["Eiscue", "Eiscue-Noice", "Eiscue-Snowcone", "Eiscue-Snowcone-Nosnow"], + }, + eiscuesnowcone: { + num: 875, + name: "Eiscue-Snowcone", + baseSpecies: "Eiscue", + forme: "Snowcone", + types: ["Water", "Ice"], + baseStats: { hp: 75, atk: 105, def: 95, spa: 65, spd: 115, spe: 50 }, + abilities: { 0: "Snow Face" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + eiscuesnowconenosnow: { + num: 875, + name: "Eiscue-Snowcone-Nosnow", + baseSpecies: "Eiscue", + forme: "Snowcone-Nosnow", + types: ["Water", "Psychic"], + baseStats: { hp: 75, atk: 105, def: 75, spa: 65, spd: 55, spe: 130 }, + abilities: { 0: "Ice Face" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + requiredAbility: "Snow Face", + battleOnly: "Eiscue-Snowcone", + }, + cardemelli: { + num: 2004, + name: "Cardemelli", + types: ["Fairy", "Ground"], + baseStats: { hp: 95, atk: 61, def: 120, spa: 89, spd: 76, spe: 54 }, + abilities: { 0: "Aroma Veil", H: "Magic Bounce" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + gingertar: { + num: 2005, + name: "Gingertar", + types: ["Fire", "Dark"], + baseStats: { hp: 100, atk: 134, def: 100, spa: 95, spd: 110, spe: 61 }, + abilities: { 0: "Ginger Stream", H: "Sturdy" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + otherFormes: ["Gingertar-Mega"], + formeOrder: ["Gingertar", "Gingertar-Mega"], + }, + gingertarmega: { + num: 2005, + name: "Gingertar-Mega", + baseSpecies: "Gingertar", + forme: "Mega", + types: ["Fire", "Dark"], + baseStats: { hp: 100, atk: 164, def: 120, spa: 95, spd: 150, spe: 71 }, + abilities: { 0: "Ginger Stream" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + requiredItem: "Gingerite", + }, + nuzcracker: { + num: 2007, + name: "Nuzcracker", + types: ["Grass", "Fighting"], + baseStats: { hp: 90, atk: 105, def: 75, spa: 70, spd: 60, spe: 80 }, + abilities: { 0: "Chlorophyll", 1: "Dancer", H: "Little Soldier" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + smorgasbag: { + num: 2008, + name: "Smorgasbag", + types: ["Poison"], + baseStats: { hp: 138, atk: 65, def: 65, spa: 85, spd: 90, spe: 50 }, + abilities: { 0: "Gluttony", H: "Toxic Debris" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + sableye: { + inherit: true, + otherFormes: ["Sableye-Mega", "Sableye-Festive", "Sableye-Festive-Mega"], + formeOrder: ["Sableye", "Sableye-Mega", "Sableye-Festive", "Sableye-Festive-Mega"], + }, + sableyefestive: { + num: 302, + name: "Sableye-Festive", + baseSpecies: "Sableye", + forme: "Festive", + types: ["Dark", "Grass"], + baseStats: { hp: 70, atk: 75, def: 75, spa: 65, spd: 65, spe: 70 }, + abilities: { 0: "Pickpocket", 1: "Slush Rush", H: "Prankster" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + sableyefestivemega: { + num: 302, + name: "Sableye-Festive-Mega", + baseSpecies: "Sableye", + forme: "Festive-Mega", + types: ["Dark", "Steel"], + baseStats: { hp: 70, atk: 85, def: 125, spa: 85, spd: 115, spe: 40 }, + abilities: { 0: "Filter" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + requiredItem: "Sablenite", + }, + mariahcarey: { + num: 2010, + name: "Mariah Carey", + types: ["Normal", "Ice"], + baseStats: { hp: 78, atk: 98, def: 70, spa: 114, spd: 70, spe: 95 }, + abilities: { 0: "Merciless", H: "Chilling Voice" }, + weightkg: 50, // i don't feel like googling it. + eggGroups: ["Human-Like"], // yeah. + }, + draydol: { + num: 2011, + name: "Draydol", + types: ["Ground", "Rock"], + baseStats: { hp: 60, atk: 105, def: 75, spa: 70, spd: 70, spe: 120 }, + abilities: { 0: "Serene Grace" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + gamesi: { + num: 2012, + name: "Gamesi", + types: ["Dark", "Electric"], + baseStats: { hp: 100, atk: 109, def: 70, spa: 109, spd: 70, spe: 60 }, + abilities: { 0: "Download", H: "Static" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + vipux: { + num: 2013, + name: "Vipux", + types: ["Dragon", "Grass"], + baseStats: { hp: 80, atk: 138, def: 84, spa: 122, spd: 100, spe: 100 }, + abilities: { 0: "Equal Share", 1: "Swindling", H: "Pickpocket" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + popsicelf: { + num: 2014, + name: "Popsicelf", + types: ["Ice", "Fire"], + baseStats: { hp: 68, atk: 111, def: 60, spa: 70, spd: 65, spe: 121 }, + abilities: { 0: "Flame Body", 1: "Clear Body", H: "Sweet Freezing" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + bellbeque: { + num: 2015, + name: "Bellbeque", + types: ["Fire", "Steel"], + baseStats: { hp: 75, atk: 60, def: 140, spa: 90, spd: 80, spe: 40 }, + abilities: { 0: "Mirror Armor", 1: "Anticipation", H: "Filter" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + chorislam: { + num: 2016, + name: "Chorislam", + types: ["Normal", "Fighting"], + baseStats: { hp: 80, atk: 105, def: 110, spa: 65, spd: 50, spe: 105 }, + abilities: { 0: "WellBaked Body" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + gholdengo: { + inherit: true, + otherFormes: ["Gholdengo-Festive"], + formeOrder: ["Gholdengo", "Gholdengo-Festive"], + }, + gholdengofestive: { + num: 1000, + name: "Gholdengo-Festive", + baseSpecies: "Gholdengo", + forme: "Festive", + types: ["Grass", "Steel"], + baseStats: { hp: 87, atk: 60, def: 96, spa: 123, spd: 101, spe: 84 }, + abilities: { 0: "Serene Grace" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + indeedee: { + inherit: true, + otherFormes: ["Indeedee-F", "Indeedee-Cook"], + formeOrder: ["Indeedee", "Indeedee-F", "Indeedee-Cook"], + }, + indeedeecook: { + num: 876, + name: "Indeedee-Cook", + baseSpecies: "Indeedee", + forme: "Cook", + types: ["Psychic", "Fire"], + baseStats: { hp: 70, atk: 55, def: 85, spa: 95, spd: 110, spe: 85 }, + abilities: { 0: "Aroma Veil", 1: "Gluttony", H: "Psychic Simmer" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + dulceirene: { + num: 2019, + name: "Dulceirene", + types: ["Fairy"], + baseStats: { hp: 76, atk: 70, def: 86, spa: 113, spd: 131, spe: 64 }, + abilities: { 0: "Fragilité Shield", H: "Aroma Veil" }, + otherFormes: ["Dulceirene-Mega"], + formeOrder: ["Dulceirene", "Dulceirene-Mega"], + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + dulceirenemega: { + num: 2019, + name: "Dulceirene-Mega", + baseSpecies: "Dulceirene", + forme: "Mega", + types: ["Fairy", "Ice"], + baseStats: { hp: 76, atk: 70, def: 86, spa: 163, spd: 141, spe: 104 }, + abilities: { 0: "Filter" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + requiredItem: "Dulceirenite", + }, + wreith: { + num: 2021, + name: "Wreith", + types: ["Grass", "Ghost"], + baseStats: { hp: 72, atk: 85, def: 130, spa: 85, spd: 86, spe: 44 }, + abilities: { 0: "Bristle" }, + otherFormes: ["Eternal Flower Wreith"], + formeOrder: ["Wreith", "Eternal Flower Wreith"], + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + eternalflowerwreith: { + num: 2021, + name: "Eternal Flower Wreith", + types: ["Fairy", "Poison"], + baseStats: { hp: 72, atk: 104, def: 86, spa: 95, spd: 130, spe: 64 }, + abilities: { 0: "Ange Halo", H: "Flower Veil" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + clamperl: { + inherit: true, + otherFormes: ["Clamperl-Alola"], + formeOrder: ["Clamperl", "Clamperl-Alola"], + }, + clamperlalola: { + num: 366, + name: "Clamperl-Alola", + baseSpecies: "Clamperl", + forme: "Alola", + types: ["Rock"], + baseStats: { hp: 35, atk: 54, def: 45, spa: 74, spd: 55, spe: 82 }, + abilities: { 0: "Shell Armor", H: "Insomnia" }, + evos: ["Goodybyss", "Naughtail"], + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + goodybyss: { + num: 2024, + name: "Goodybyss", + types: ["Rock", "Dragon"], + baseStats: { hp: 55, atk: 84, def: 52, spa: 114, spd: 75, spe: 105 }, + abilities: { 0: "Swift Swim", H: "Good as Gold" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + naughtail: { + num: 2025, + name: "Naughtail", + types: ["Rock", "Dark"], + baseStats: { hp: 55, atk: 105, def: 52, spa: 114, spd: 75, spe: 84 }, + abilities: { 0: "Swift Swim", H: "Rock Head" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + gospiel: { + num: 2026, + name: "Gospiel", + types: ["Psychic"], + baseStats: { hp: 80, atk: 40, def: 95, spa: 75, spd: 100, spe: 30 }, + abilities: { 0: "Telepathy", H: "Levitate" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + rusalvia: { + num: 2027, + name: "Rusalvia", + types: ["Psychic", "Water"], + baseStats: { hp: 80, atk: 65, def: 100, spa: 130, spd: 105, spe: 50 }, + abilities: { 0: "Telepathy", H: "Liquid Voice" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + seraphexe: { + num: 2028, + name: "Seraphexe", + types: ["Psychic", "Fire"], + baseStats: { hp: 80, atk: 65, def: 105, spa: 100, spd: 130, spe: 50 }, + abilities: { 0: "Telepathy", H: "Trace" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + mirrelette: { + num: 2029, + name: "Mirrelette", + types: ["Steel", "Ice"], + baseStats: { hp: 70, atk: 60, def: 80, spa: 100, spd: 105, spe: 95 }, + abilities: { 0: "Shattered Reflection", 1: "Levitate", H: "Mirror Armor" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + klefki: { + inherit: true, + otherFormes: ["Klefki-McCallister"], + formeOrder: ["Klefki", "Klefki-McCallister"], + }, + klefkimccallister: { + num: 707, + name: "Klefki-McCallister", + baseSpecies: "Klefki", + forme: "McCallister", + types: ["Steel", "Fire"], + baseStats: { hp: 57, atk: 80, def: 91, spa: 80, spd: 87, spe: 75 }, + abilities: { 0: "Prankstwr", 1: "Flame Body", H: "Entrapment" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + sacchamorte: { + num: 2001, + name: "Sacchamorte", + types: ["Dark", "Poison"], + baseStats: { hp: 77, atk: 112, def: 81, spa: 80, spd: 70, spe: 105 }, + abilities: { 0: "Dancer", 1: "Sweet Veil", H: "Regenerator" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + treench: { + num: 2002, + name: "Treench", + types: ["Dark", "Grass"], + baseStats: { hp: 75, atk: 106, def: 80, spa: 50, spd: 80, spe: 114 }, + abilities: { 0: "Gift Stealer", H: "Mimicry" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + grincheartcaged: { + num: 2003, + name: "Grincheart-Caged", + types: ["Fairy", "Steel"], + baseStats: { hp: 100, atk: 65, def: 105, spa: 65, spd: 80, spe: 50 }, + abilities: { 0: "Heart Cage" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + otherFormes: ["Grincheart-Grown"], + formeOrder: ["Grincheart-Caged", "Grincheart-Grown"], + }, + grincheartgrown: { + num: 2003, + name: "Grincheart-Grown", + baseSpecies: "Grincheart-Caged", + forme: "Grown", + types: ["Fairy", "Fighting"], + baseStats: { hp: 100, atk: 150, def: 95, spa: 115, spd: 70, spe: 100 }, + abilities: { 0: "Heart Cage" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + lelitoccia: { + num: 2005, + name: "Lelitoccia", + types: ["Ghost", "Rock"], + baseStats: { hp: 61, atk: 43, def: 89, spa: 113, spd: 167, spe: 97 }, + abilities: { 0: "Beast Boost" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + deckherd: { + num: 2006, + name: "Deckherd", + types: ["Normal", "Dark"], + baseStats: { hp: 79, atk: 109, def: 109, spa: 89, spd: 99, spe: 49 }, + abilities: { 0: "Fluffy", 1: "Technician", H: "Cash Infusion" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + caneine: { + num: 2007, + name: "Caneine", + types: ["Rock", "Fairy"], + baseStats: { hp: 111, atk: 112, def: 93, spa: 74, spd: 65, spe: 86 }, + abilities: { 0: "Guard Dog", 1: "Stamina", H: "Tough Claws" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + picktreebel: { + num: 2008, + name: "Picktreebel", + types: ["Grass", "Rock"], + baseStats: { hp: 80, atk: 105, def: 65, spa: 100, spd: 70, spe: 80 }, + abilities: { 0: "Chlorophyll", 1: "Quick Draw", H: "Crystalize" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + otherFormes: ["Picktreebel-Mega"], + formeOrder: ["Picktreebel-Mega", "Picktreebel-Mega"], + }, + picktreebelmega: { + num: 2008, + name: "Picktreebel-Mega", + baseSpecies: "Picktreebel", + forme: "Mega", + types: ["Grass", "Rock"], + baseStats: { hp: 80, atk: 135, def: 85, spa: 125, spd: 95, spe: 80 }, + abilities: { 0: "Crystalize" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + requiredItem: "Picktreelite", + }, + twinklingshade: { + num: 2011, + name: "Twinkling Shade", + types: ["Dark", "Flying"], + baseStats: { hp: 104, atk: 70, def: 86, spa: 92, spd: 100, spe: 118 }, + abilities: { 0: "Protosynthesis" }, + tags: ["Paradox"], + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + irontwilight: { + num: 2010, + name: "Iron Twilight", + types: ["Steel", "Dark"], + baseStats: { hp: 96, atk: 76, def: 66, spa: 138, spd: 92, spe: 122 }, + abilities: { 0: "Quark Drive" }, + tags: ["Paradox"], + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + faerwork: { + num: 2012, + name: "Faerwork", + types: ["Fire", "Fairy"], + baseStats: { hp: 60, atk: 60, def: 80, spa: 105, spd: 80, spe: 105 }, + abilities: { 0: "Illuminate", 1: "Flash Fire", H: "Sheer Force" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + antaron: { + num: 2013, + name: "Antaron", + types: ["Dragon", "Fire"], + baseStats: { hp: 88, atk: 69, def: 85, spa: 143, spd: 97, spe: 79 }, + abilities: { 0: "Berserk", 1: "Dancer", H: "Good as Gold" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + snowglob: { + num: 2014, + name: "Snowglob", + types: ["Ice", "Grass"], + baseStats: { hp: 75, atk: 50, def: 60, spa: 90, spd: 120, spe: 90 }, + abilities: { 0: "Snow Warning" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + dinjingle: { + num: 2015, + name: "Dinjingle", + types: ["Steel", "Fairy"], + baseStats: { hp: 90, atk: 50, def: 100, spa: 110, spd: 90, spe: 70 }, + abilities: { 0: "Bell Choir" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + guywithsweater: { + num: 2016, + name: "Guywithsweater", + types: ["Normal", "Fairy"], + baseStats: { hp: 85, atk: 110, def: 110, spa: 50, spd: 70, spe: 65 }, + abilities: { 0: "Thick Fat", 1: "Rough Skin", H: "Stench" }, + weightkg: 50, // placeholder + eggGroups: ["Human-Like"], // placeholder + }, + gristletoe: { + num: 2017, + name: "Gristletoe", + types: ["Poison", "Dark"], + baseStats: { hp: 105, atk: 95, def: 90, spa: 50, spd: 110, spe: 70 }, + abilities: { 0: "Earth Eater", 1: "Poison Touch", H: "Corrosion" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + aegibashpolar: { + num: 2018, + name: "Aegibash-Polar", + // baseSpecies: "Aegibash", + // forme: "Polar", + types: ["Steel", "Electric"], + baseStats: { hp: 60, atk: 50, def: 110, spa: 140, spd: 80, spe: 60 }, + abilities: { 0: "Magnet Pull", 1: "Minus", H: "No Guard" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + gingermason: { + num: 2019, + name: "Gingermason", + types: ["Fire", "Ground"], + baseStats: { hp: 68, atk: 98, def: 87, spa: 66, spd: 93, spe: 98 }, + abilities: { 0: "WellBaked Body", 1: "Ice Body", H: "Simple" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + swadloon: { + inherit: true, + otherFormes: ["Swadloon-Festive"], + formeOrder: ["Swadloon", "Swadloon-Festive"], + }, + swadloonfestive: { + num: 541, + name: "Swadloon-Festive", + baseSpecies: "Swadloon", + forme: "Festive", + types: ["Bug", "Grass"], + baseStats: { hp: 55, atk: 63, def: 90, spa: 50, spd: 80, spe: 42 }, + abilities: { 0: "Social Retreat", 1: "Slush Rush", H: "Snow Cloak" }, + evos: ["Leavanny-Festive"], + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + leavanny: { + inherit: true, + otherFormes: ["Leavanny-Festive"], + formeOrder: ["Leavanny", "Leavanny-Festive"], + }, + leavannyfestive: { + num: 542, + name: "Leavanny-Festive", + baseSpecies: "Leavanny", + forme: "Festive", + types: ["Bug", "Grass"], + baseStats: { hp: 75, atk: 103, def: 70, spa: 75, spd: 70, spe: 108 }, + abilities: { 0: "Aroma Veil", 1: "Slush Rush", H: "Snow Cloak" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, + maushold: { + inherit: true, + otherFormes: ["Maushold-Four", "Maushold-Dysfunctional"], + formeOrder: ["Maushold", "Maushold-Four", "Maushold-Dysfunctional"], + }, + mausholddysfunctional: { + num: 925, + name: "Maushold-Dysfunctional", + baseSpecies: "Maushold", + forme: "Dysfunctional", + types: ["Normal", "Rock"], + baseStats: { hp: 74, atk: 95, def: 83, spa: 65, spd: 77, spe: 111 }, + abilities: { 0: "Technician", H: "Parental Bond" }, + weightkg: 50, // placeholder + eggGroups: ["Undiscovered"], // placeholder + }, +}; diff --git a/data/mods/ccapm2025/rulesets.ts b/data/mods/ccapm2025/rulesets.ts new file mode 100644 index 0000000000..84808dcb63 --- /dev/null +++ b/data/mods/ccapm2025/rulesets.ts @@ -0,0 +1,284 @@ +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { + terastalclause: { + effectType: 'Rule', + name: 'Terastal Clause', + desc: "Prevents Pokémon from Terastallizing", + onBegin() { + for (const pokemon of this.getAllPokemon()) { + if (pokemon.species.baseSpecies !== 'Ogerpon') { + pokemon.canTerastallize = null; + } + } + this.add('rule', 'Terastal Clause: You cannot Terastallize'); + }, + }, + ccapmformchanges: { + effectType: 'Rule', + name: 'CCAPM Form Changes', + desc: "Makes a bunch of form changes function", + onBegin() { + this.add('rule', 'CCAPM Form Changes: Makes many form changes work'); + }, + onSwitchIn(pokemon) { + if (!this.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (pokemon.species.name === "Samurott" && pokemon.side.totalFainted >= 3) { + pokemon.formeChange('Samurott-Overlord', null, true); + } + if (pokemon.species.name === "Jirachi" && (pokemon.side as any).holdHandsUsers?.length >= 2) { + pokemon.formeChange('Jirachi-Harmonic', null, true); + + const holdHandsIndex = pokemon.set.moves + .map(move => move.toLowerCase().replace(/[^a-z0-9]/g, '')).indexOf('holdhands' as ID); + if (holdHandsIndex < 0) return; + + const move = this.dex.moves.get('lightofruin'); + const sketchedMove = { + move: move.name, + id: move.id, + pp: move.pp, + maxpp: move.pp, + target: move.target, + disabled: false, + used: false, + }; + pokemon.moveSlots[holdHandsIndex] = sketchedMove; + pokemon.baseMoveSlots[holdHandsIndex] = sketchedMove; + } + if (pokemon.species.name === "Luvdisc" && pokemon.side.totalFainted >= 5) { + pokemon.formeChange('Luvdisc-Heartbreak', null, true); + } + } + }, + onWeatherChange(target, source, effect) { + if (!this.ruleTable.tagRules.includes("+pokemontag:cap")) { + const weather = target.effectiveWeather(); + if (weather === 'sunnyday' || weather === 'desolateland') { + if (target.species.name === "Beartic") { + target.formeChange('Beartic-Freshwater', null, true); + const glacierFangIndex = target.set.moves + .map(move => move.toLowerCase().replace(/[^a-z0-9]/g, '')).indexOf('glacierfang' as ID); + if (glacierFangIndex < 0) return; + + const move = this.dex.moves.get('meltingmaul'); + const sketchedMove = { + move: move.name, + id: move.id, + pp: move.pp, + maxpp: move.pp, + target: move.target, + disabled: false, + used: false, + }; + target.moveSlots[glacierFangIndex] = sketchedMove; + target.baseMoveSlots[glacierFangIndex] = sketchedMove; + } + } else if (weather === 'hail' || weather === 'snowscape') { + if (target.species.name === "Beartic-Freshwater") { + target.formeChange('Beartic', null, true); + const meltingMaulIndex = target.set.moves + .map(move => move.toLowerCase().replace(/[^a-z0-9]/g, '')).indexOf('meltingmaul' as ID); + if (meltingMaulIndex < 0) return; + + const move = this.dex.moves.get('glacierfang'); + const sketchedMove = { + move: move.name, + id: move.id, + pp: move.pp, + maxpp: move.pp, + target: move.target, + disabled: false, + used: false, + }; + target.moveSlots[meltingMaulIndex] = sketchedMove; + target.baseMoveSlots[meltingMaulIndex] = sketchedMove; + } + } + } + }, + onDamagingHit(damage, target, source, move) { + if (!this.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (move.type === 'Fire' && target.species.name === "Beartic") { + target.formeChange('Beartic-Freshwater', null, true); + + const glacierFangIndex = target.set.moves + .map(setMove => setMove.toLowerCase().replace(/[^a-z0-9]/g, '')).indexOf('glacierfang' as ID); + if (glacierFangIndex < 0) return; + + const meltingmaul = this.dex.moves.get('meltingmaul'); + const sketchedMove = { + move: meltingmaul.name, + id: meltingmaul.id, + pp: meltingmaul.pp, + maxpp: meltingmaul.pp, + target: meltingmaul.target, + disabled: false, + used: false, + }; + + target.moveSlots[glacierFangIndex] = sketchedMove; + target.baseMoveSlots[glacierFangIndex] = sketchedMove; + } else if (move.type === 'Ice' && target.species.name === "Beartic-Freshwater") { + target.formeChange('Beartic', null, true); + + const meltingMaulIndex = target.set.moves + .map(setMove => setMove.toLowerCase().replace(/[^a-z0-9]/g, '')).indexOf('meltingmaul' as ID); + if (meltingMaulIndex < 0) return; + + const glacierfang = this.dex.moves.get('glacierfang'); + const sketchedMove = { + move: glacierfang.name, + id: glacierfang.id, + pp: glacierfang.pp, + maxpp: glacierfang.pp, + target: glacierfang.target, + disabled: false, + used: false, + }; + target.moveSlots[meltingMaulIndex] = sketchedMove; + target.baseMoveSlots[meltingMaulIndex] = sketchedMove; + } else if (move.type === 'Rock' && target.species.name === "Kommo-o") { + target.formeChange('Kommo-o-Hard-Rock', null, true); + } else if (move.type === 'Electric' && target.species.name === "Luxray") { + target.formeChange('Luxray-Conductive', null, true); + } else if (!move.damage && !move.damageCallback && + target.getMoveHitData(move).typeMod > 0 && + target.species.name === "Rhyperior") { + target.formeChange('Rhyperior-Adversity', null, true); + } + } + }, + onDamage(damage, target, source, effect) { + if (!this.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (effect && effect.id === 'stealthrock' && target.species.name === "Kommo-o") { + target.formeChange('Kommo-o-Hard-Rock', null, true); + } + } + }, + onAfterBoost(boost, target, source, effect) { + if (!this.ruleTable.tagRules.includes("+pokemontag:cap")) { + /* let speedUp = false; + let i: BoostID; + for (i in boost) { + if (boost[i]! > 0) { + speedUp = true; + } + } + if (speedUp && target.species.name === "Blaziken") { + target.formeChange('Blaziken-Wildfire', null, true); + target.setAbility('burnout', target); + } */ + if (boost.spe && boost.spe > 0 && + target.species.name === "Blaziken") { + target.formeChange('Blaziken-Wildfire', null, true); + } + } + if (effect?.name === 'Fiery Dance' && boost.spa && + source.species.name === "Volcarona") { + source.formeChange('Volcarona-Radiant', null, true); + this.add('-activate', source, 'ability: Desolate Land'); + } + }, + onModifyMovePriority: 1, + onModifyMove(move, attacker, defender) { + const shayLand = [ + 'seedflare', 'gigadrain', 'flowertrick', 'sappyseed', + ]; + const shaySky = [ + 'aromatherapy', 'worryseed', 'synthesis', 'flowershield', 'floralhealing', 'strengthsap', + ]; + if (attacker.species.name === "Shaymin" && shaySky.includes(move.id)) { + attacker.formeChange('Shaymin-Sky', null, true); + } else if (attacker.species.name === "Shaymin-Sky" && shayLand.includes(move.id)) { + attacker.formeChange('Shaymin', null, true); + } + }, + onAfterMoveSecondarySelf(source, target, move) { + if (!this.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (source.species.name === "Clawitzer" && move.flags['pulse']) { + source.formeChange('Clawitzer-Curled', null, true); + } else if (source.species.name === "Lilligant" && move.flags['dance']) { + source.formeChange('Lilligant-Hisui', null, true); + } else if (source.species.name === "Luxray-Conductive" && + move.type !== 'Electric') { + source.formeChange('Luxray', null, true); + } else if (source.species.name === "Luxray" && move.type === 'Electric') { + source.formeChange('Luxray-Conductive', null, true); + } else if (source.species.name === "Talonflame" && move.type === 'Flying') { + source.formeChange('Talonflame-Tempest', null, true); + } + } + }, + onResidualOrder: 28, + onResidualSubOrder: 2, + onResidual(pokemon) { + if (!this.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (pokemon.activeTurns && pokemon.species.name === "Fearow") { + pokemon.formeChange('Fearow-Ferocious', null, true); + this.add('-ability', pokemon, 'Wonder Guard'); + } else if (pokemon.activeTurns && pokemon.species.name === "Fearow-Ferocious") { + pokemon.formeChange('Fearow', null, true); + this.add('-ability', pokemon, 'Sniper'); + } else if (pokemon.hp <= pokemon.maxhp / 2 && + pokemon.species.name === "Sunflora") { + pokemon.formeChange('Sunflora-Wilted', null, true); + } else if (pokemon.hp <= pokemon.maxhp / 2 && + pokemon.species.name === "Torterra") { + pokemon.sethp(Math.min(pokemon.maxhp, pokemon.hp + pokemon.baseMaxhp / 4)); + this.add('-heal', pokemon, pokemon.getHealth); + pokemon.formeChange('Torterra-Old!', null, true); + } + } + }, + onAfterFaint(length, target, source, effect) { + if (!this.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (source?.species.id === 'lucario') { + if (this.effectState.auraTriggered) return; + if (effect?.effectType !== 'Move') { + return; + } + if (source.hp && !source.transformed && source.side.foePokemonLeft()) { + this.add('-activate', source, 'ability: Aura Bond'); + // the ability isn't real + source.formeChange('Lucario-Aura Bond', this.effect, true); + source.formeRegression = true; + this.effectState.auraTriggered = true; + } + } else if (source?.species.name === "Octillery") { + if (effect && effect.effectType === 'Move' && target.getMoveHitData(effect).crit) { + source.formeChange('Octillery-Sharpshooter', null, true); + } + } else if (source?.species.name === "Dudunsparce" || source?.species.name === "Du-Dudunsparce") { + if (effect && effect.effectType === 'Move') { + source.formeChange('Dudunsparce-tongueemoji', null, true); + } + } + } + }, + onUpdate(pokemon) { + if (!this.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (pokemon.species.baseSpecies === "Beartic") { + this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon); + } + for (const target of pokemon.adjacentFoes()) { + if ((target.status === 'psn' || target.status === 'tox') && + pokemon.species.name === "Pecharunt") { + pokemon.formeChange('Pecharunt-Puppetmaster', null, true); + } else if (target.status !== 'psn' && target.status !== 'tox' && + pokemon.species.name === "Pecharunt-Puppetmaster") { + pokemon.formeChange('Pecharunt', null, true); + } + } + if (pokemon.species.name === "Victini" && pokemon.hp <= pokemon.maxhp / 4 && + pokemon.hp > 0 && pokemon.side.pokemonLeft > 1) { + let stat: BoostID; + for (stat in pokemon.boosts) { + if (pokemon.boosts[stat] < 0) { + return; + } + } + pokemon.formeChange('Victini-Victorious', null, true); + } + } + }, + }, +}; diff --git a/data/mods/ccapm2025/scripts.ts b/data/mods/ccapm2025/scripts.ts new file mode 100644 index 0000000000..8a46226d2d --- /dev/null +++ b/data/mods/ccapm2025/scripts.ts @@ -0,0 +1,800 @@ +import { toID } from '../../../sim/dex-data'; +import { RESTORATIVE_BERRIES } from "../../../sim/pokemon"; +export const Scripts: ModdedBattleScriptsData = { + gen: 9, + init() { + for (const mon of this.species.all()) { + if (mon.name === mon.baseSpecies && this.modData("Learnsets", mon.id)?.learnset) { + this.modData("Learnsets", mon.id).learnset.holdhands = ["9L1"]; + } + } + this.modData("Learnsets", "alcremie").learnset.acidarmor = ["9L1"]; + this.modData("Learnsets", "drifblim").learnset.hurricane = ["9L1"]; + this.modData("Learnsets", "drifblim").learnset.infernalparade = ["9L1"]; + this.modData("Learnsets", "electrode").learnset.healingwish = ["9L1"]; + this.modData("Learnsets", "electrode").learnset.lunardance = ["9L1"]; + this.modData("Learnsets", "electrode").learnset.memento = ["9L1"]; + this.modData("Learnsets", "electrode").learnset.mistyexplosion = ["9L1"]; + this.modData("Learnsets", "flygon").learnset.healbell = ["9L1"]; + this.modData("Learnsets", "flygon").learnset.snarl = ["9L1"]; + this.modData("Learnsets", "flygon").learnset.quiverdance = ["9L1"]; + this.modData("Learnsets", "flygon").learnset.vacuumwave = ["9L1"]; + this.modData("Learnsets", "genesect").learnset.agility = ["9L1"]; + this.modData("Learnsets", "genesect").learnset.bubblebeam = ["9L1"]; + this.modData("Learnsets", "genesect").learnset.earthquake = ["9L1"]; + this.modData("Learnsets", "genesect").learnset.firepunch = ["9L1"]; + this.modData("Learnsets", "genesect").learnset.icepunch = ["9L1"]; + this.modData("Learnsets", "genesect").learnset.megapunch = ["9L1"]; + this.modData("Learnsets", "genesect").learnset.terablast = ["9L1"]; + this.modData("Learnsets", "genesect").learnset.terrainpulse = ["9L1"]; + this.modData("Learnsets", "genesect").learnset.thunderpunch = ["9L1"]; + this.modData("Learnsets", "genesect").learnset.waterpulse = ["9L1"]; + this.modData("Learnsets", "ironvaliant").learnset.playrough = ["9L1"]; + this.modData("Learnsets", "ironvaliant").learnset.willowisp = ["9L1"]; + this.modData("Learnsets", "ironvaliant").learnset.wish = ["9L1"]; + this.modData("Learnsets", "jirachi").learnset.holdhands = ["9L1"]; + this.modData("Learnsets", "kommoo").learnset.powergem = ["9L1"]; + this.modData("Learnsets", "kommoo").learnset.stoneedge = ["9L1"]; + this.modData("Learnsets", "mesprit").learnset.recover = ["9L1"]; + this.modData("Learnsets", "mesprit").learnset.gaslight = ["9L1"]; + this.modData("Learnsets", "octillery").learnset.recover = ["9L1"]; + this.modData("Learnsets", "shaymin").learnset.floralhealing = ["9L1"]; + this.modData("Learnsets", "shaymin").learnset.flowershield = ["9L1"]; + this.modData("Learnsets", "shaymin").learnset.flowertrick = ["9L1"]; + this.modData("Learnsets", "shaymin").learnset.sappyseed = ["9L1"]; + this.modData("Learnsets", "shaymin").learnset.strengthsap = ["9L1"]; + this.modData("Learnsets", "simisear").learnset.burningjealousy = ["9L1"]; + this.modData("Learnsets", "simisear").learnset.earthpower = ["9L1"]; + this.modData("Learnsets", "simisear").learnset.eruption = ["9L1"]; + this.modData("Learnsets", "simisear").learnset.fakeout = ["9L1"]; + this.modData("Learnsets", "simisear").learnset.mudshot = ["9L1"]; + this.modData("Learnsets", "simisear").learnset.temperflare = ["9L1"]; + this.modData("Learnsets", "simisear").learnset.terablast = ["9L1"]; + this.modData("Learnsets", "simisear").learnset.stoneedge = ["9L1"]; + this.modData("Learnsets", "simisear").learnset.swordsdance = ["9L1"]; + this.modData("Learnsets", "slowking").learnset.darkpulse = ["9L1"]; + this.modData("Learnsets", "slowking").learnset.sludgebomb = ["9L1"]; + this.modData("Learnsets", "slowking").learnset.sludgewave = ["9L1"]; + this.modData("Learnsets", "stakataka").learnset.taunt = ["9L1"]; + this.modData("Learnsets", "volcarona").learnset.weatherball = ["9L1"]; + this.modData("Learnsets", "volcarona").learnset.quiverdance = ["9L1"]; + this.modData("Learnsets", "weavile").learnset.amnesia = ["9L1"]; + this.modData("Learnsets", "weavile").learnset.auroraveil = ["9L1"]; + this.modData("Learnsets", "weavile").learnset.berrier = ["9L1"]; + this.modData("Learnsets", "weavile").learnset.dive = ["9L1"]; + this.modData("Learnsets", "weavile").learnset.haze = ["9L1"]; + this.modData("Learnsets", "weavile").learnset.hypnosis = ["9L1"]; + this.modData("Learnsets", "weavile").learnset.moonlight = ["9L1"]; + this.modData("Learnsets", "weavile").learnset.obstruct = ["9L1"]; + this.modData("Learnsets", "weavile").learnset.switcheroo = ["9L1"]; + this.modData("Learnsets", "wyrdeer").learnset.auroraveil = ["9L1"]; + this.modData("Learnsets", "wyrdeer").learnset.blizzard = ["9L1"]; + this.modData("Learnsets", "wyrdeer").learnset.freezedry = ["9L1"]; + this.modData("Learnsets", "wyrdeer").learnset.icebeam = ["9L1"]; + this.modData("Learnsets", "wyrdeer").learnset.iciclespear = ["9L1"]; + this.modData("Learnsets", "wyrdeer").learnset.icywind = ["9L1"]; + this.modData("Learnsets", "wyrdeer").learnset.solarbeam = ["9L1"]; + this.modData("Learnsets", "wyrdeer").learnset.energyball = ["9L1"]; + this.modData("Learnsets", "zarude").learnset.rest = ["9L1"]; + this.modData("Learnsets", "zeraora").learnset.doubleshock = ["9L1"]; + this.modData("Learnsets", "zeraora").learnset.highjumpkick = ["9L1"]; + this.modData("Learnsets", "zeraora").learnset.quickattack = ["9L1"]; + this.modData("Learnsets", "zeraora").learnset.charge = ["9L1"]; + this.modData("Learnsets", "aurorus").learnset.primalpulse = ["9L1"]; + this.modData("Learnsets", "cofagrigus").learnset.dragonscurse = ["9L1"]; + this.modData("Learnsets", "dudunsparce").learnset.sixtongueemojis = ["9L1"]; + this.modData("Learnsets", "kecleon").learnset.kaleidostorm = ["9L1"]; + this.modData("Learnsets", "beartic").learnset.glacierfang = ["9L1"]; + this.modData("Learnsets", "stakataka").learnset.stackshield = ["9L1"]; + this.modData("Learnsets", "aegislash").learnset.soulboundslash = ["9L1"]; + this.modData("Learnsets", "landorus").learnset.generationaldeevolution = ["9L1"]; + // this.modData("Learnsets", "landorus").learnset.generationalevolution = ["9L1"]; + this.modData("Learnsets", "sylveon").learnset.ribbonshift = ["9L1"]; + this.modData("Learnsets", "slowking").learnset.frostbittenreception = ["9L1"]; + }, + actions: { + inherit: true, + modifyDamage( + baseDamage: number, pokemon: Pokemon, target: Pokemon, move: ActiveMove, suppressMessages = false + ) { + const tr = this.battle.trunc; + if (!move.type) move.type = '???'; + let type = move.type; + + baseDamage += 2; + + if (move.spreadHit) { + // multi-target modifier (doubles only) + const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75; + this.battle.debug(`Spread modifier: ${spreadModifier}`); + baseDamage = this.battle.modify(baseDamage, spreadModifier); + } else if (move.multihitType === 'parentalbond' && move.hit > 1) { + // Parental Bond modifier + const bondModifier = this.battle.gen > 6 ? 0.25 : 0.5; + this.battle.debug(`Parental Bond modifier: ${bondModifier}`); + baseDamage = this.battle.modify(baseDamage, bondModifier); + if (pokemon.ability === 'aurapartner') { + type = 'Ghost'; + move.type = 'Ghost'; + } + } + + // weather modifier + baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage); + + // crit - not a modifier + const isCrit = target.getMoveHitData(move).crit; + if (isCrit) { + baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2))); + } + + // random factor - also not a modifier + baseDamage = this.battle.randomizer(baseDamage); + + // STAB + // The "???" type never gets STAB + // Not even if you Roost in Gen 4 and somehow manage to use + // Struggle in the same turn. + // (On second thought, it might be easier to get a MissingNo.) + if (type !== '???') { + let stab: number | [number, number] = 1; + + const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type); + if (isSTAB) { + stab = 1.5; + } + + // The Stellar tera type makes this incredibly confusing + // If the move's type does not match one of the user's base types, + // the Stellar tera type applies a one-time 1.2x damage boost for that type. + // + // If the move's type does match one of the user's base types, + // then the Stellar tera type applies a one-time 2x STAB boost for that type, + // and then goes back to using the regular 1.5x STAB boost for those types. + if (pokemon.terastallized === 'Stellar') { + if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) { + stab = isSTAB ? 2 : [4915, 4096]; + move.stellarBoosted = true; + if (pokemon.species.name !== 'Terapagos-Stellar') { + pokemon.stellarBoostedTypes.push(type); + } + } + } else { + if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) { + stab = 2; + } + stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab); + } + + baseDamage = this.battle.modify(baseDamage, stab); + } + + // types + let typeMod = target.runEffectiveness(move); + typeMod = this.battle.clampIntRange(typeMod, -6, 6); + target.getMoveHitData(move).typeMod = typeMod; + if (typeMod > 0) { + if (!suppressMessages) this.battle.add('-supereffective', target); + + for (let i = 0; i < typeMod; i++) { + baseDamage *= 2; + } + } + if (typeMod < 0) { + if (!suppressMessages) this.battle.add('-resisted', target); + + for (let i = 0; i > typeMod; i--) { + baseDamage = tr(baseDamage / 2); + } + } + + if (isCrit && !suppressMessages) this.battle.add('-crit', target); + + if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) { + if (this.battle.gen < 6 || move.id !== 'facade') { + baseDamage = this.battle.modify(baseDamage, 0.5); + } + } + + // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers + if (this.battle.gen === 5 && !baseDamage) baseDamage = 1; + + // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb. + baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage); + + const bypassProtect = target.getMoveHitData(move).bypassProtect; + if (bypassProtect) { + baseDamage = this.battle.modify(baseDamage, 0.25); + if (bypassProtect !== true && bypassProtect.effectType === 'Ability') { + this.battle.add('-ability', pokemon, bypassProtect.name); + } + this.battle.add('-zbroken', target); + } + + // Generation 6-7 moves the check for minimum 1 damage after the final modifier... + if (this.battle.gen !== 5 && !baseDamage) return 1; + + // ...but 16-bit truncation happens even later, and can truncate to 0 + return tr(baseDamage, 16); + }, + canUltraBurst(pokemon: Pokemon) { + if (['Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane'].includes(pokemon.baseSpecies.name) && + pokemon.getItem().id === 'ultranecroziumz') { + return "Necrozma-Ultra"; + } else if (pokemon.baseSpecies.name === 'Simisear' && + pokemon.getItem().id === 'ultrasimiseariumz') { + return "Simisear-Ultra"; + } + return null; + }, + runSwitch(pokemon: Pokemon) { + const switchersIn = [pokemon]; + while (this.battle.queue.peek()?.choice === 'runSwitch') { + const nextSwitch = this.battle.queue.shift(); + switchersIn.push(nextSwitch!.pokemon!); + } + const allActive = this.battle.getAllActive(true); + this.battle.speedSort(allActive); + this.battle.speedOrder = allActive.map(a => a.side.n * a.battle.sides.length + a.position); + this.battle.fieldEvent('SwitchIn', switchersIn); + + for (const poke of switchersIn) { + if (!poke.hp) continue; + poke.isStarted = true; + poke.draggedIn = null; + if (poke.species.name === 'Iron Valiant' && !pokemon.battle.ruleTable.tagRules.includes("+pokemontag:cap")) + pokemon.m.usedMoves = []; + if (poke.species.name === 'Sudowoodo' && !pokemon.battle.ruleTable.tagRules.includes("+pokemontag:cap")) + poke.m.grassMoves = 0; + } + return true; + }, + useMove( + move: Move, pokemon: Pokemon, options?: { + target?: Pokemon | null, sourceEffect?: Effect | null, + zMove?: string, maxMove?: string, + } + ) { + pokemon.moveThisTurnResult = undefined; + const oldMoveResult: boolean | null | undefined = pokemon.moveThisTurnResult; + const success = this.useMoveInner(move, pokemon, options); + if (oldMoveResult === pokemon.moveThisTurnResult) pokemon.moveThisTurnResult = success; + + if (success && pokemon.species.name === 'Iron Valiant' && + !pokemon.battle.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (!pokemon.m.usedMoves) pokemon.m.usedMoves = []; + if (!pokemon.m.usedMoves.includes(move.id)) pokemon.m.usedMoves.push(move.id); + if (pokemon.moves.filter(name => pokemon.m.usedMoves.includes(name)).toString() === pokemon.moves.toString()) + pokemon.formeChange('Iron Valiant-High-Judge', null, true); + } + if (success && pokemon.species.name === 'Mewtwo' && + !pokemon.battle.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (!pokemon.m.darkMoves) pokemon.m.darkMoves = 0; + if (move.type === 'Dark') pokemon.m.darkMoves++; + if (pokemon.m.darkMoves >= 3) + pokemon.formeChange('Mewtwo-Evil-Scary', null, true); + } + if (success && pokemon.species.name === 'Volcanion' && + !pokemon.battle.ruleTable.tagRules.includes("+pokemontag:cap")) { + if (!pokemon.m.steamMoves) pokemon.m.steamMoves = 0; + if ((move.type === 'Water' || move.type === 'Fire')) pokemon.m.steamMoves++; + if (pokemon.m.steamMoves >= 3) + pokemon.formeChange('Volcanion-Surge', null, true); + } + if (success && move.type === 'Grass' && + !pokemon.battle.ruleTable.tagRules.includes("+pokemontag:cap")) { + for (const mon of pokemon.foes()) { + if (mon.species.name !== 'Sudowoodo') continue; + if (!mon.m.grassMoves) mon.m.grassMoves = 0; + mon.m.grassMoves++; + if (mon.m.grassMoves >= 2) { + mon.formeChange('Sudowoodo-Nopseudo', null, true); + } + } + for (const mon of pokemon.alliesAndSelf()) { + if (mon.species.name !== 'Sudowoodo') continue; + if (!mon.m.grassMoves) mon.m.grassMoves = 0; + mon.m.grassMoves++; + if (mon.m.grassMoves >= 2) { + mon.formeChange('Sudowoodo-Nopseudo', null, true); + } + } + } + return success; + }, + terastallize(pokemon: Pokemon) { + if (pokemon.species.baseSpecies === 'Ogerpon' && !['Fire', 'Grass', 'Rock', 'Water', 'Fairy'] + .includes(pokemon.teraType) && (!pokemon.illusion || pokemon.illusion.species.baseSpecies === 'Ogerpon')) { + this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game crashes.", false, pokemon.side); + return; + } + + if (pokemon.illusion && ['Ogerpon', 'Terapagos'].includes(pokemon.illusion.species.baseSpecies)) { + this.battle.singleEvent('End', this.dex.abilities.get('Illusion'), pokemon.abilityState, pokemon); + } + + const type = pokemon.teraType; + this.battle.add('-terastallize', pokemon, type); + pokemon.terastallized = type; + for (const ally of pokemon.side.pokemon) { + ally.canTerastallize = null; + } + pokemon.addedType = ''; + pokemon.knownType = true; + pokemon.apparentType = type; + if (pokemon.species.baseSpecies === 'Ogerpon') { + let ogerponSpecies = toID(pokemon.species.battleOnly || pokemon.species.id); + ogerponSpecies += ogerponSpecies === 'ogerpon' ? 'tealtera' : 'tera'; + pokemon.formeChange(ogerponSpecies, null, true); + } + if (pokemon.species.name === 'Terapagos-Terastal') { + pokemon.formeChange('Terapagos-Stellar', null, true); + } + if (pokemon.species.baseSpecies === 'Morpeko' && !pokemon.transformed && + pokemon.baseSpecies.id !== pokemon.species.id + ) { + pokemon.formeRegression = true; + pokemon.baseSpecies = pokemon.species; + pokemon.details = pokemon.getUpdatedDetails(); + } + this.battle.runEvent('AfterTerastallization', pokemon); + }, + }, + faintMessages(lastFirst = false, forceCheck = false, checkWin = true) { + if (this.ended) return; + const length = this.faintQueue.length; + if (!length) { + if (forceCheck && this.checkWin()) return true; + return false; + } + if (lastFirst) { + this.faintQueue.unshift(this.faintQueue[this.faintQueue.length - 1]); + this.faintQueue.pop(); + } + let faintQueueLeft, faintData; + + while (this.faintQueue.length) { + faintQueueLeft = this.faintQueue.length; + faintData = this.faintQueue.shift()!; + const pokemon: Pokemon = faintData.target; + if (!pokemon.fainted && this.runEvent('BeforeFaint', pokemon, faintData.source, faintData.effect)) { + if (pokemon.species.name === 'Kecleon' && !this.ruleTable.tagRules.includes("+pokemontag:cap")) { + let forme = 'None'; + switch (pokemon.types[0]) { + case 'Fire': + case 'Rock': + case 'Ground': + forme = 'Kecleon-Volcanic'; + break; + case 'Grass': + case 'Bug': + case 'Poison': + forme = 'Kecleon-Wild'; + break; + case 'Electric': + case 'Fairy': + case 'Psychic': + forme = 'Kecleon-Luminous'; + break; + case 'Ghost': + case 'Dragon': + case 'Steel': + forme = 'Kecleon-Storybook'; + break; + case 'Ice': + case 'Water': + case 'Flying': + forme = 'Kecleon-Phasic'; + break; + case 'Normal': + case 'Fighting': + case 'Dark': + forme = 'Kecleon-Ruffian'; + break; + default: + forme = 'None'; + } + + if (forme !== 'None') { + pokemon.formeChange(forme, null, true); + this.add('-message', `Kecleon was resurrected into ${pokemon.species}.`); + + pokemon.faintQueued = false; + pokemon.subFainted = false; + pokemon.status = ''; + pokemon.hp = 1; // Needed so hp functions works + pokemon.sethp(pokemon.maxhp); + pokemon.ability = pokemon.baseAbility; + + this.add('-heal', pokemon, pokemon.getHealth, '[from] move: Revival Blessing'); + continue; + } + } + this.add('faint', pokemon); + if (pokemon.side.pokemonLeft) pokemon.side.pokemonLeft--; + if (pokemon.side.totalFainted < 100) pokemon.side.totalFainted++; + this.runEvent('Faint', pokemon, faintData.source, faintData.effect); + this.singleEvent('End', pokemon.getAbility(), pokemon.abilityState, pokemon); + this.singleEvent('End', pokemon.getItem(), pokemon.itemState, pokemon); + if (pokemon.formeRegression && !pokemon.transformed) { + // before clearing volatiles + pokemon.baseSpecies = this.dex.species.get(pokemon.set.species || pokemon.set.name); + pokemon.baseAbility = toID(pokemon.set.ability); + } + pokemon.clearVolatile(false); + pokemon.fainted = true; + pokemon.illusion = null; + pokemon.isActive = false; + pokemon.isStarted = false; + delete pokemon.terastallized; + if (pokemon.formeRegression) { + // after clearing volatiles + pokemon.details = pokemon.getUpdatedDetails(); + this.add('detailschange', pokemon, pokemon.details, '[silent]'); + pokemon.updateMaxHp(); + pokemon.formeRegression = false; + } + pokemon.side.faintedThisTurn = pokemon; + if (this.faintQueue.length >= faintQueueLeft) checkWin = true; + } + } + + if (this.gen <= 1) { + // in gen 1, fainting skips the rest of the turn + // residuals don't exist in gen 1 + this.queue.clear(); + // Fainting clears accumulated Bide damage + for (const pokemon of this.getAllActive()) { + if (pokemon.volatiles['bide']?.damage) { + pokemon.volatiles['bide'].damage = 0; + this.hint("Desync Clause Mod activated!"); + this.hint("In Gen 1, Bide's accumulated damage is reset to 0 when a Pokemon faints."); + } + } + } else if (this.gen <= 3 && this.gameType === 'singles') { + // in gen 3 or earlier, fainting in singles skips to residuals + for (const pokemon of this.getAllActive()) { + if (this.gen <= 2) { + // in gen 2, fainting skips moves only + this.queue.cancelMove(pokemon); + } else { + // in gen 3, fainting skips all moves and switches + this.queue.cancelAction(pokemon); + } + } + } + + if (checkWin && this.checkWin(faintData)) return true; + + if (faintData && length) { + this.runEvent('AfterFaint', faintData.target, faintData.source, faintData.effect, length); + } + return false; + }, + field: { + setWeather(status: string | Condition, source: Pokemon | 'debug' | null = null, sourceEffect: Effect | null = null) { + status = this.battle.dex.conditions.get(status); + if (!sourceEffect && this.battle.effect) sourceEffect = this.battle.effect; + if (!source && this.battle.event?.target) source = this.battle.event.target; + if (source === 'debug') source = this.battle.sides[0].active[0]; + + if (this.weather === status.id) { + if (sourceEffect && sourceEffect.effectType === 'Ability') { + if (this.battle.gen > 5 || this.weatherState.duration === 0) { + return false; + } + } else if (this.battle.gen > 2 || status.id === 'sandstorm') { + return false; + } + } + if (source) { + const result = this.battle.runEvent('SetWeather', source, source, status); + if (!result) { + if (result === false) { + if ((sourceEffect as Move)?.weather) { + this.battle.add('-fail', source, sourceEffect, '[from] ' + this.weather); + } else if (sourceEffect && sourceEffect.effectType === 'Ability') { + this.battle.add('-ability', source, sourceEffect, '[from] ' + this.weather, '[fail]'); + } + } + return null; + } + } + const prevWeather = this.weather; + const prevWeatherState = this.weatherState; + this.weather = status.id; + this.weatherState = this.battle.initEffectState({ id: status.id }); + if (source) { + this.weatherState.source = source; + this.weatherState.sourceSlot = source.getSlot(); + } + if (status.duration) { + this.weatherState.duration = status.duration; + } + if (status.durationCallback) { + if (!source) throw new Error(`setting weather without a source`); + this.weatherState.duration = status.durationCallback.call(this.battle, source, source, sourceEffect); + } + if (!this.battle.singleEvent('FieldStart', status, this.weatherState, this, source, sourceEffect)) { + this.weather = prevWeather; + this.weatherState = prevWeatherState; + return false; + } else if (prevWeather === 'snowscape' && !this.battle.ruleTable.tagRules.includes("+pokemontag:cap")) { + for (const pokemon of this.battle.getAllActive()) { + if (pokemon.species.id === 'wyrdeer') { + pokemon.formeChange('Wyrdeer-Snowblind', this.battle.effect, true); + this.battle.add('-activate', pokemon, 'ability: Heart of Cold'); + } + } + } + this.battle.eachEvent('WeatherChange', sourceEffect); + return true; + }, + }, + pokemon: { + inherit: true, + isGrounded(negateImmunity = false) { + if ('gravity' in this.battle.field.pseudoWeather) return true; + if ('ingrain' in this.volatiles && this.battle.gen >= 4) return true; + if ('smackdown' in this.volatiles) return true; + const item = (this.ignoringItem() ? '' : this.item); + if (item === 'ironball') return true; + // If a Fire/Flying type uses Burn Up and Roost, it becomes ???/Flying-type, but it's still grounded. + if (!negateImmunity && this.hasType('Flying') && !(this.hasType('???') && 'roost' in this.volatiles)) return false; + if ((this.hasAbility('levitate') || this.hasAbility('interdimensionalmissile') || + this.hasAbility('stackchange')) && + !this.battle.suppressingAbility(this)) { + return null; + } + if ('magnetrise' in this.volatiles) return false; + if ('telekinesis' in this.volatiles) return false; + return item !== 'airballoon'; + }, + cureStatus(this: Pokemon, silent?: boolean, source: Pokemon | null = null) { + if (!this.hp || !this.status) return false; + + if (source?.ability === 'herbalelixir') { + switch (this.status) { + case 'psn': + case 'tox': + this.setAbility('poisonheal'); + this.baseAbility = this.ability; + return false; + case 'brn': + this.setAbility('guts'); + this.baseAbility = this.ability; + return false; + case 'par': + this.setAbility('quickfeet'); + this.baseAbility = this.ability; + return false; + case 'ber': + this.setAbility('marvelscale'); + this.baseAbility = this.ability; + return false; + default: + break; + } + } + + this.setStatus(''); + this.battle.add('-curestatus', this, this.status, silent ? '[silent]' : '[msg]'); + if (this.status === 'slp' && this.removeVolatile('nightmare')) { + this.battle.add('-end', this, 'Nightmare', '[silent]'); + } + + if (source?.species.name === 'Zarude' && !source.battle.ruleTable.tagRules.includes("+pokemontag:cap")) { + source.formeChange('Zarude-Alchemist', null, true); + } + + return true; + }, + eatItem(this: Pokemon, force?: boolean, source?: Pokemon, sourceEffect?: Effect) { + if (!this.item) return false; + if ((!this.hp && this.item !== 'jabocaberry' && this.item !== 'rowapberry') || !this.isActive) return false; + + if (!sourceEffect && this.battle.effect) sourceEffect = this.battle.effect; + if (!source && this.battle.event?.target) source = this.battle.event.target; + const item = this.getItem(); + if (sourceEffect?.effectType === 'Item' && this.item !== sourceEffect.id && source === this) { + // if an item is telling us to eat it but we aren't holding it, we probably shouldn't eat what we are holding + return false; + } + if ( + this.battle.runEvent('UseItem', this, null, null, item) && + (force || this.battle.runEvent('TryEatItem', this, null, null, item)) + ) { + this.battle.add('-enditem', this, item, '[eat]'); + + this.battle.singleEvent('Eat', item, this.itemState, this, source, sourceEffect); + this.battle.runEvent('EatItem', this, source, sourceEffect, item); + + if (RESTORATIVE_BERRIES.has(item.id)) { + switch (this.pendingStaleness) { + case 'internal': + if (this.staleness !== 'external') this.staleness = 'internal'; + break; + case 'external': + this.staleness = 'external'; + break; + } + this.pendingStaleness = undefined; + } + + this.lastItem = this.item; + this.item = ''; + this.battle.clearEffectState(this.itemState); + this.usedItemThisTurn = true; + this.ateBerry = true; + if (this.species.baseSpecies === 'Alcremie' && !this.battle.ruleTable.tagRules.includes("+pokemontag:cap")) { + switch (this.species.id) { + case "alcremierubycream": + this.formeChange('Alcremie-Sweetened-Ruby-Cream', null, true); + break; + case "alcremiematchacream": + this.formeChange('Alcremie-Sweetened-Matcha-Cream', null, true); + break; + case "alcremiemintcream": + this.formeChange('Alcremie-Sweetened-Mint-Cream', null, true); + break; + case "alcremielemoncream": + this.formeChange('Alcremie-Sweetened-Lemon-Cream', null, true); + break; + case "alcremiesaltedcream": + this.formeChange('Alcremie-Sweetened-Salted-Cream', null, true); + break; + case "alcremierubyswirl": + this.formeChange('Alcremie-Sweetened-Ruby-Swirl', null, true); + break; + case "alcremiecaramelswirl": + this.formeChange('Alcremie-Sweetened-Caramel-Swirl', null, true); + break; + case "alcremierainbowswirl": + this.formeChange('Alcremie-Sweetened-Rainbow-Swirl', null, true); + break; + default: + this.formeChange('Alcremie-Sweetened', null, true); + break; + } + + switch (this.lastItem) { + case "aguavberry": + this.battle.boost({ spd: 1 }, this); + break; + case "enigmaberry": + const type = this.battle.dex.types.names()[this.battle.random(18)]; + if (this.hasType(type)) return false; + if (!this.addType(type)) return false; + this.battle.add('-start', this, 'typeadd', type); + break; + case "figyberry": + this.battle.boost({ atk: 1 }, this); + break; + case "iapapaberry": + this.battle.boost({ def: 1 }, this); + break; + case "magoberry": + this.battle.boost({ spe: 1 }, this); + break; + case "oranberry": + this.heal(this.maxhp); + break; + case "sitrusberry": + const side = this.side.foe; + if (!side.sideConditions['stickyweb']) { + side.addSideCondition('stickyweb', this.foes()[0]); + } + break; + case "wikiberry": + this.battle.boost({ spa: 1 }, this); + break; + default: + break; + } + } + this.battle.runEvent('AfterUseItem', this, null, null, item); + return true; + } + return false; + }, + + calculateStat(statName: StatIDExceptHP, boost: number, modifier?: number, statUser?: Pokemon) { + statName = toID(statName) as StatIDExceptHP; + // @ts-expect-error type checking prevents 'hp' from being passed, but we're paranoid + if (statName === 'hp') throw new Error("Please read `maxhp` directly"); + + // base stat + let stat = this.storedStats[statName]; + + // Implement Trying My Best! + if (!this.battle.ruleTable.tagRules.includes("+pokemontag:cap")) { + const mon = this as any; + // Make sure it has changed abilities since + if (mon.timesSwitchedIn && mon.ability !== 'tryingmybest') { + stat *= (10 + mon.timesSwitchedIn) / 10; + } + } + + // Wonder Room swaps defenses before calculating anything else + if ('wonderroom' in this.battle.field.pseudoWeather) { + if (statName === 'def') { + stat = this.storedStats['spd']; + } else if (statName === 'spd') { + stat = this.storedStats['def']; + } + } + + // stat boosts + let boosts: SparseBoostsTable = {}; + const boostName = statName as BoostID; + boosts[boostName] = boost; + boosts = this.battle.runEvent('ModifyBoost', statUser || this, null, null, boosts); + boost = boosts[boostName]!; + const boostTable = [1, 1.5, 2, 2.5, 3, 3.5, 4]; + if (boost > 6) boost = 6; + if (boost < -6) boost = -6; + if (boost >= 0) { + stat = Math.floor(stat * boostTable[boost]); + } else { + stat = Math.floor(stat / boostTable[-boost]); + } + + // stat modifier + return this.battle.modify(stat, (modifier || 1)); + }, + + getStat(statName: StatIDExceptHP, unboosted?: boolean, unmodified?: boolean) { + statName = toID(statName) as StatIDExceptHP; + // @ts-expect-error type checking prevents 'hp' from being passed, but we're paranoid + if (statName === 'hp') throw new Error("Please read `maxhp` directly"); + + // base stat + let stat = this.storedStats[statName]; + + // Implement Trying My Best! + if (!this.battle.ruleTable.tagRules.includes("+pokemontag:cap")) { + const mon = this as any; + // Make sure it has changed abilities since + if (mon.timesSwitchedIn && mon.ability !== 'tryingmybest') { + stat *= (10 + mon.timesSwitchedIn) / 10; + } + } + + // Download ignores Wonder Room's effect, but this results in + // stat stages being calculated on the opposite defensive stat + if (unmodified && 'wonderroom' in this.battle.field.pseudoWeather) { + if (statName === 'def') { + statName = 'spd'; + } else if (statName === 'spd') { + statName = 'def'; + } + } + + // stat boosts + if (!unboosted) { + let boosts = this.boosts; + if (!unmodified) { + boosts = this.battle.runEvent('ModifyBoost', this, null, null, { ...boosts }); + } + let boost = boosts[statName]; + const boostTable = [1, 1.5, 2, 2.5, 3, 3.5, 4]; + if (boost > 6) boost = 6; + if (boost < -6) boost = -6; + if (boost >= 0) { + stat = Math.floor(stat * boostTable[boost]); + } else { + stat = Math.floor(stat / boostTable[-boost]); + } + } + + // stat modifier effects + if (!unmodified) { + const statTable: { [s in StatIDExceptHP]: string } = { atk: 'Atk', def: 'Def', spa: 'SpA', spd: 'SpD', spe: 'Spe' }; + stat = this.battle.runEvent('Modify' + statTable[statName], this, null, null, stat); + } + + if (statName === 'spe' && stat > 10000 && !this.battle.format.battle?.trunc) stat = 10000; + return stat; + }, + }, +}; diff --git a/data/mods/champions/abilities.ts b/data/mods/champions/abilities.ts new file mode 100644 index 0000000000..fe05f009d3 --- /dev/null +++ b/data/mods/champions/abilities.ts @@ -0,0 +1,66 @@ +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + angershell: { + inherit: true, + onDamage(damage, target, source, effect) { + this.effectState.checkedAngerShell = !(effect.effectType === "Move" && !effect.multihit); + }, + }, + berserk: { + inherit: true, + onDamage(damage, target, source, effect) { + this.effectState.checkedBerserk = !(effect.effectType === "Move" && !effect.multihit); + }, + }, + dragonize: { + inherit: true, + isNonstandard: null, + }, + healer: { + inherit: true, + onResidual(pokemon) { + for (const allyActive of pokemon.adjacentAllies()) { + if (allyActive.status && this.randomChance(1, 2)) { + this.add('-activate', pokemon, 'ability: Healer'); + allyActive.cureStatus(); + } + } + }, + desc: "50% chance this Pokemon's ally has its non-volatile status condition cured at the end of each turn.", + shortDesc: "50% chance this Pokemon's ally has its status cured at the end of each turn.", + }, + megasol: { + inherit: true, + isNonstandard: null, + }, + piercingdrill: { + inherit: true, + isNonstandard: null, + }, + shedskin: { + inherit: true, + onResidual(pokemon) { + if (pokemon.hp && pokemon.status && this.randomChance(3, 10)) { + this.debug('shed skin'); + this.add('-activate', pokemon, 'ability: Shed Skin'); + pokemon.cureStatus(); + } + }, + desc: "This Pokemon has a 30% chance to have its non-volatile status condition cured at the end of each turn.", + shortDesc: "This Pokemon has a 30% chance to have its status cured at the end of each turn.", + }, + spicyspray: { + inherit: true, + isNonstandard: null, + }, + unseenfist: { + onModifyMove: undefined, // no inherit + onHitProtect(source, target, move) { + if (move.flags['contact']) { + target.getMoveHitData(move).bypassProtect = this.effect; + return false; + } + }, + inherit: true, + shortDesc: "This Pokemon's contact moves ignore a target's protection and deal 1/4 the usual damage.", + }, +}; diff --git a/data/mods/champions/conditions.ts b/data/mods/champions/conditions.ts new file mode 100644 index 0000000000..d85f458394 --- /dev/null +++ b/data/mods/champions/conditions.ts @@ -0,0 +1,136 @@ +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { + par: { + inherit: true, + onBeforeMove(pokemon) { + if (this.randomChance(1, 8)) { + this.add('cant', pokemon, 'par'); + return false; + } + }, + }, + slp: { + inherit: true, + onStart(target, source, sourceEffect) { + if (sourceEffect && sourceEffect.effectType === 'Ability') { + this.add('-status', target, 'slp', '[from] ability: ' + sourceEffect.name, `[of] ${source}`); + } else if (sourceEffect && sourceEffect.effectType === 'Move') { + this.add('-status', target, 'slp', `[from] move: ${sourceEffect.name}`); + } else { + this.add('-status', target, 'slp'); + } + + // 1/3 chance for a Pokemon to wake up on turn 2 + this.effectState.startTime = this.sample([2, 3, 3]); + this.effectState.time = this.effectState.startTime; + + if (target.removeVolatile('nightmare')) { + this.add('-end', target, 'Nightmare', '[silent]'); + } + }, + }, + frz: { + inherit: true, + onStart(target, source, sourceEffect) { + if (sourceEffect && sourceEffect.effectType === 'Ability') { + this.add('-status', target, 'frz', '[from] ability: ' + sourceEffect.name, `[of] ${source}`); + } else { + this.add('-status', target, 'frz'); + } + if (target.species.name === 'Shaymin-Sky' && target.baseSpecies.baseSpecies === 'Shaymin') { + target.formeChange('Shaymin', this.effect, true); + } + + this.effectState.startTime = 3; + this.effectState.time = this.effectState.startTime; + }, + onBeforeMove(pokemon, target, move) { + if (move.flags['defrost'] && !(move.id === 'burnup' && !pokemon.hasType('Fire'))) return; + pokemon.statusState.time--; + if (pokemon.statusState.time <= 0 || this.randomChance(1, 4)) { + pokemon.cureStatus(); + return; + } + this.add('cant', pokemon, 'frz'); + return false; + }, + }, + + raindance: { + inherit: true, + onWeatherModifyDamage(damage, attacker, defender, move) { + if (attacker.effectiveWeather() !== 'raindance') return; + if (move.type === 'Water') { + this.debug('rain water boost'); + return this.chainModify(1.5); + } + if (move.type === 'Fire') { + this.debug('rain fire suppress'); + return this.chainModify(0.5); + } + }, + }, + primordialsea: { + inherit: true, + onWeatherModifyDamage(damage, attacker, defender, move) { + if (attacker.effectiveWeather() !== 'primordialsea') return; + if (move.type === 'Water') { + this.debug('Rain water boost'); + return this.chainModify(1.5); + } + }, + }, + sunnyday: { + inherit: true, + onWeatherModifyDamage(damage, attacker, defender, move) { + if (attacker.effectiveWeather() !== 'sunnyday') return; + if (move.id === 'hydrosteam') { + this.debug('Sunny Day Hydro Steam boost'); + return this.chainModify(1.5); + } + if (move.type === 'Fire') { + this.debug('Sunny Day fire boost'); + return this.chainModify(1.5); + } + if (move.type === 'Water') { + this.debug('Sunny Day water suppress'); + return this.chainModify(0.5); + } + }, + }, + desolateland: { + inherit: true, + onWeatherModifyDamage(damage, attacker, defender, move) { + if (attacker.effectiveWeather() !== 'desolateland') return; + if (move.type === 'Fire') { + this.debug('Desolate Land fire boost'); + return this.chainModify(1.5); + } + }, + }, + sandstorm: { + inherit: true, + onModifySpD(spd, target, source) { + if (target.hasType('Rock') && source.effectiveWeather() === 'sandstorm') { + return this.modify(spd, 1.5); + } + }, + }, + snowscape: { + inherit: true, + onModifyDef(def, target, source) { + if (target.hasType('Ice') && source.effectiveWeather() === 'snowscape') { + return this.modify(def, 1.5); + } + }, + }, + // TODO: check Mega Sol's interaction with Deltastream + // deltastream: { + // inherit: true, + // onEffectiveness(typeMod, target, type, move) { + // if (move && move.effectType === 'Move' && move.category !== 'Status' && type === 'Flying' && typeMod > 0) { + // this.add('-fieldactivate', 'Delta Stream'); + // return 0; + // } + // }, + // }, +}; diff --git a/data/mods/champions/formats-data.ts b/data/mods/champions/formats-data.ts new file mode 100644 index 0000000000..be3f6bdec5 --- /dev/null +++ b/data/mods/champions/formats-data.ts @@ -0,0 +1,5128 @@ +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { + bulbasaur: { + isNonstandard: "Past", + tier: "Illegal", + }, + ivysaur: { + isNonstandard: "Past", + tier: "Illegal", + }, + venusaur: { + tier: "OU", + }, + venusaurmega: { + tier: "OU", + }, + venusaurgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + charmander: { + isNonstandard: "Past", + tier: "Illegal", + }, + charmeleon: { + isNonstandard: "Past", + tier: "Illegal", + }, + charizard: { + tier: "OU", + }, + charizardmegax: { + tier: "OU", + }, + charizardmegay: { + tier: "OU", + }, + charizardgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + squirtle: { + isNonstandard: "Past", + tier: "Illegal", + }, + wartortle: { + isNonstandard: "Past", + tier: "Illegal", + }, + blastoise: { + tier: "OU", + }, + blastoisemega: { + tier: "OU", + }, + blastoisegmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + caterpie: { + isNonstandard: "Past", + tier: "Illegal", + }, + metapod: { + isNonstandard: "Past", + tier: "Illegal", + }, + butterfree: { + isNonstandard: "Past", + tier: "Illegal", + }, + butterfreegmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + weedle: { + isNonstandard: "Past", + tier: "Illegal", + }, + kakuna: { + isNonstandard: "Past", + tier: "Illegal", + }, + beedrill: { + tier: "OU", + }, + beedrillmega: { + tier: "OU", + }, + pidgey: { + isNonstandard: "Past", + tier: "Illegal", + }, + pidgeotto: { + isNonstandard: "Past", + tier: "Illegal", + }, + pidgeot: { + tier: "OU", + }, + pidgeotmega: { + tier: "OU", + }, + rattata: { + isNonstandard: "Past", + tier: "Illegal", + }, + rattataalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + raticate: { + isNonstandard: "Past", + tier: "Illegal", + }, + raticatealola: { + isNonstandard: "Past", + tier: "Illegal", + }, + raticatealolatotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + spearow: { + isNonstandard: "Past", + tier: "Illegal", + }, + fearow: { + isNonstandard: "Past", + tier: "Illegal", + }, + ekans: { + isNonstandard: "Past", + tier: "Illegal", + }, + arbok: { + tier: "OU", + }, + pichu: { + isNonstandard: "Past", + tier: "Illegal", + }, + pichuspikyeared: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachu: { + tier: "NFE", + }, + pikachucosplay: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachurockstar: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachubelle: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachupopstar: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachuphd: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachulibre: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachuoriginal: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachuhoenn: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachusinnoh: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachuunova: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachukalos: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachualola: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachupartner: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachustarter: { + isNonstandard: "LGPE", + tier: "Illegal", + }, + pikachugmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + pikachuworld: { + isNonstandard: "Past", + tier: "Illegal", + }, + raichu: { + tier: "OU", + }, + raichualola: { + tier: "OU", + }, + raichumegax: { + isNonstandard: "Past", + tier: "Illegal", + }, + raichumegay: { + isNonstandard: "Past", + tier: "Illegal", + }, + sandshrew: { + isNonstandard: "Past", + tier: "Illegal", + }, + sandshrewalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + sandslash: { + isNonstandard: "Past", + tier: "Illegal", + }, + sandslashalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + nidoranf: { + isNonstandard: "Past", + tier: "Illegal", + }, + nidorina: { + isNonstandard: "Past", + tier: "Illegal", + }, + nidoqueen: { + isNonstandard: "Past", + tier: "Illegal", + }, + nidoranm: { + isNonstandard: "Past", + tier: "Illegal", + }, + nidorino: { + isNonstandard: "Past", + tier: "Illegal", + }, + nidoking: { + isNonstandard: "Past", + tier: "Illegal", + }, + cleffa: { + isNonstandard: "Past", + tier: "Illegal", + }, + clefairy: { + isNonstandard: "Past", + tier: "Illegal", + }, + clefable: { + tier: "OU", + }, + clefablemega: { + tier: "OU", + }, + vulpix: { + isNonstandard: "Past", + tier: "Illegal", + }, + vulpixalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + ninetales: { + tier: "OU", + }, + ninetalesalola: { + tier: "OU", + }, + igglybuff: { + isNonstandard: "Past", + tier: "Illegal", + }, + jigglypuff: { + isNonstandard: "Past", + tier: "Illegal", + }, + wigglytuff: { + isNonstandard: "Past", + tier: "Illegal", + }, + zubat: { + isNonstandard: "Past", + tier: "Illegal", + }, + golbat: { + isNonstandard: "Past", + tier: "Illegal", + }, + crobat: { + isNonstandard: "Past", + tier: "Illegal", + }, + oddish: { + isNonstandard: "Past", + tier: "Illegal", + }, + gloom: { + isNonstandard: "Past", + tier: "Illegal", + }, + vileplume: { + isNonstandard: "Past", + tier: "Illegal", + }, + bellossom: { + isNonstandard: "Past", + tier: "Illegal", + }, + paras: { + isNonstandard: "Past", + tier: "Illegal", + }, + parasect: { + isNonstandard: "Past", + tier: "Illegal", + }, + venonat: { + isNonstandard: "Past", + tier: "Illegal", + }, + venomoth: { + isNonstandard: "Past", + tier: "Illegal", + }, + diglett: { + isNonstandard: "Past", + tier: "Illegal", + }, + diglettalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + dugtrio: { + isNonstandard: "Past", + tier: "Illegal", + }, + dugtrioalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + meowth: { + isNonstandard: "Past", + tier: "Illegal", + }, + meowthalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + meowthgalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + meowthgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + persian: { + isNonstandard: "Past", + tier: "Illegal", + }, + persianalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + perrserker: { + isNonstandard: "Past", + tier: "Illegal", + }, + psyduck: { + isNonstandard: "Past", + tier: "Illegal", + }, + golduck: { + isNonstandard: "Past", + tier: "Illegal", + }, + mankey: { + isNonstandard: "Past", + tier: "Illegal", + }, + primeape: { + isNonstandard: "Past", + tier: "Illegal", + }, + growlithe: { + isNonstandard: "Past", + tier: "Illegal", + }, + growlithehisui: { + isNonstandard: "Past", + tier: "Illegal", + }, + arcanine: { + tier: "OU", + }, + arcaninehisui: { + tier: "OU", + }, + poliwag: { + isNonstandard: "Past", + tier: "Illegal", + }, + poliwhirl: { + isNonstandard: "Past", + tier: "Illegal", + }, + poliwrath: { + isNonstandard: "Past", + tier: "Illegal", + }, + politoed: { + tier: "OU", + }, + abra: { + isNonstandard: "Past", + tier: "Illegal", + }, + kadabra: { + isNonstandard: "Past", + tier: "Illegal", + }, + alakazam: { + tier: "OU", + }, + alakazammega: { + tier: "OU", + }, + machop: { + isNonstandard: "Past", + tier: "Illegal", + }, + machoke: { + isNonstandard: "Past", + tier: "Illegal", + }, + machamp: { + tier: "OU", + }, + machampgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + bellsprout: { + isNonstandard: "Past", + tier: "Illegal", + }, + weepinbell: { + isNonstandard: "Past", + tier: "Illegal", + }, + victreebel: { + tier: "OU", + }, + victreebelmega: { + tier: "OU", + }, + tentacool: { + isNonstandard: "Past", + tier: "Illegal", + }, + tentacruel: { + isNonstandard: "Past", + tier: "Illegal", + }, + geodude: { + isNonstandard: "Past", + tier: "Illegal", + }, + geodudealola: { + isNonstandard: "Past", + tier: "Illegal", + }, + graveler: { + isNonstandard: "Past", + tier: "Illegal", + }, + graveleralola: { + isNonstandard: "Past", + tier: "Illegal", + }, + golem: { + isNonstandard: "Past", + tier: "Illegal", + }, + golemalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + ponyta: { + isNonstandard: "Past", + tier: "Illegal", + }, + ponytagalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + rapidash: { + isNonstandard: "Past", + tier: "Illegal", + }, + rapidashgalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + slowpoke: { + isNonstandard: "Past", + tier: "Illegal", + }, + slowpokegalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + slowbro: { + tier: "OU", + }, + slowbromega: { + tier: "OU", + }, + slowbrogalar: { + tier: "OU", + }, + slowking: { + tier: "OU", + }, + slowkinggalar: { + tier: "OU", + }, + magnemite: { + isNonstandard: "Past", + tier: "Illegal", + }, + magneton: { + isNonstandard: "Past", + tier: "Illegal", + }, + magnezone: { + isNonstandard: "Past", + tier: "Illegal", + }, + farfetchd: { + isNonstandard: "Past", + tier: "Illegal", + }, + farfetchdgalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + sirfetchd: { + isNonstandard: "Past", + tier: "Illegal", + }, + doduo: { + isNonstandard: "Past", + tier: "Illegal", + }, + dodrio: { + isNonstandard: "Past", + tier: "Illegal", + }, + seel: { + isNonstandard: "Past", + tier: "Illegal", + }, + dewgong: { + isNonstandard: "Past", + tier: "Illegal", + }, + grimer: { + isNonstandard: "Past", + tier: "Illegal", + }, + grimeralola: { + isNonstandard: "Past", + tier: "Illegal", + }, + muk: { + isNonstandard: "Past", + tier: "Illegal", + }, + mukalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + shellder: { + isNonstandard: "Past", + tier: "Illegal", + }, + cloyster: { + isNonstandard: "Past", + tier: "Illegal", + }, + gastly: { + isNonstandard: "Past", + tier: "Illegal", + }, + haunter: { + isNonstandard: "Past", + tier: "Illegal", + }, + gengar: { + tier: "OU", + }, + gengarmega: { + tier: "Uber", + }, + gengargmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + onix: { + isNonstandard: "Past", + tier: "Illegal", + }, + steelix: { + tier: "OU", + }, + steelixmega: { + tier: "OU", + }, + drowzee: { + isNonstandard: "Past", + tier: "Illegal", + }, + hypno: { + isNonstandard: "Past", + tier: "Illegal", + }, + krabby: { + isNonstandard: "Past", + tier: "Illegal", + }, + kingler: { + isNonstandard: "Past", + tier: "Illegal", + }, + kinglergmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + voltorb: { + isNonstandard: "Past", + tier: "Illegal", + }, + voltorbhisui: { + isNonstandard: "Past", + tier: "Illegal", + }, + electrode: { + isNonstandard: "Past", + tier: "Illegal", + }, + electrodehisui: { + isNonstandard: "Past", + tier: "Illegal", + }, + exeggcute: { + isNonstandard: "Past", + tier: "Illegal", + }, + exeggutor: { + isNonstandard: "Past", + tier: "Illegal", + }, + exeggutoralola: { + isNonstandard: "Past", + tier: "Illegal", + }, + cubone: { + isNonstandard: "Past", + tier: "Illegal", + }, + marowak: { + isNonstandard: "Past", + tier: "Illegal", + }, + marowakalola: { + isNonstandard: "Past", + tier: "Illegal", + }, + marowakalolatotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + tyrogue: { + isNonstandard: "Past", + tier: "Illegal", + }, + hitmonlee: { + isNonstandard: "Past", + tier: "Illegal", + }, + hitmonchan: { + isNonstandard: "Past", + tier: "Illegal", + }, + hitmontop: { + isNonstandard: "Past", + tier: "Illegal", + }, + lickitung: { + isNonstandard: "Past", + tier: "Illegal", + }, + lickilicky: { + isNonstandard: "Past", + tier: "Illegal", + }, + koffing: { + isNonstandard: "Past", + tier: "Illegal", + }, + weezing: { + isNonstandard: "Past", + tier: "Illegal", + }, + weezinggalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + rhyhorn: { + isNonstandard: "Past", + tier: "Illegal", + }, + rhydon: { + isNonstandard: "Past", + tier: "Illegal", + }, + rhyperior: { + tier: "OU", + }, + happiny: { + isNonstandard: "Past", + tier: "Illegal", + }, + chansey: { + isNonstandard: "Past", + tier: "Illegal", + }, + blissey: { + isNonstandard: "Past", + tier: "Illegal", + }, + tangela: { + isNonstandard: "Past", + tier: "Illegal", + }, + tangrowth: { + isNonstandard: "Past", + tier: "Illegal", + }, + kangaskhan: { + tier: "OU", + }, + kangaskhanmega: { + tier: "OU", + }, + horsea: { + isNonstandard: "Past", + tier: "Illegal", + }, + seadra: { + isNonstandard: "Past", + tier: "Illegal", + }, + kingdra: { + isNonstandard: "Past", + tier: "Illegal", + }, + goldeen: { + isNonstandard: "Past", + tier: "Illegal", + }, + seaking: { + isNonstandard: "Past", + tier: "Illegal", + }, + staryu: { + isNonstandard: "Past", + tier: "Illegal", + }, + starmie: { + tier: "OU", + }, + starmiemega: { + tier: "Uber", + }, + mimejr: { + isNonstandard: "Past", + tier: "Illegal", + }, + mrmime: { + isNonstandard: "Past", + tier: "Illegal", + }, + mrmimegalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + mrrime: { + tier: "OU", + }, + scyther: { + isNonstandard: "Past", + tier: "Illegal", + }, + scizor: { + tier: "OU", + }, + scizormega: { + tier: "OU", + }, + kleavor: { + tier: "OU", + }, + smoochum: { + isNonstandard: "Past", + tier: "Illegal", + }, + jynx: { + isNonstandard: "Past", + tier: "Illegal", + }, + elekid: { + isNonstandard: "Past", + tier: "Illegal", + }, + electabuzz: { + isNonstandard: "Past", + tier: "Illegal", + }, + electivire: { + isNonstandard: "Past", + tier: "Illegal", + }, + magby: { + isNonstandard: "Past", + tier: "Illegal", + }, + magmar: { + isNonstandard: "Past", + tier: "Illegal", + }, + magmortar: { + isNonstandard: "Past", + tier: "Illegal", + }, + pinsir: { + tier: "OU", + }, + pinsirmega: { + tier: "OU", + }, + tauros: { + tier: "OU", + }, + taurospaldeacombat: { + tier: "OU", + }, + taurospaldeablaze: { + tier: "OU", + }, + taurospaldeaaqua: { + tier: "OU", + }, + magikarp: { + isNonstandard: "Past", + tier: "Illegal", + }, + gyarados: { + tier: "OU", + }, + gyaradosmega: { + tier: "OU", + }, + lapras: { + isNonstandard: "Past", + tier: "Illegal", + }, + laprasgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + ditto: { + tier: "OU", + }, + eevee: { + isNonstandard: "Past", + tier: "Illegal", + }, + eeveestarter: { + isNonstandard: "LGPE", + tier: "Illegal", + }, + eeveegmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + vaporeon: { + tier: "OU", + }, + jolteon: { + tier: "OU", + }, + flareon: { + tier: "OU", + }, + espeon: { + tier: "OU", + }, + umbreon: { + tier: "OU", + }, + leafeon: { + tier: "OU", + }, + glaceon: { + tier: "OU", + }, + sylveon: { + tier: "OU", + }, + porygon: { + isNonstandard: "Past", + tier: "Illegal", + }, + porygon2: { + isNonstandard: "Past", + tier: "Illegal", + }, + porygonz: { + isNonstandard: "Past", + tier: "Illegal", + }, + omanyte: { + isNonstandard: "Past", + tier: "Illegal", + }, + omastar: { + isNonstandard: "Past", + tier: "Illegal", + }, + kabuto: { + isNonstandard: "Past", + tier: "Illegal", + }, + kabutops: { + isNonstandard: "Past", + tier: "Illegal", + }, + aerodactyl: { + tier: "OU", + }, + aerodactylmega: { + tier: "OU", + }, + munchlax: { + isNonstandard: "Past", + tier: "Illegal", + }, + snorlax: { + tier: "OU", + }, + snorlaxgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + articuno: { + isNonstandard: "Past", + tier: "Illegal", + }, + articunogalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + zapdos: { + isNonstandard: "Past", + tier: "Illegal", + }, + zapdosgalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + moltres: { + isNonstandard: "Past", + tier: "Illegal", + }, + moltresgalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + dratini: { + isNonstandard: "Past", + tier: "Illegal", + }, + dragonair: { + isNonstandard: "Past", + tier: "Illegal", + }, + dragonite: { + tier: "OU", + }, + dragonitemega: { + tier: "OU", + }, + mewtwo: { + isNonstandard: "Past", + tier: "Illegal", + }, + mewtwomegax: { + isNonstandard: "Past", + tier: "Illegal", + }, + mewtwomegay: { + isNonstandard: "Past", + tier: "Illegal", + }, + mew: { + isNonstandard: "Past", + tier: "Illegal", + }, + chikorita: { + isNonstandard: "Past", + tier: "Illegal", + }, + bayleef: { + isNonstandard: "Past", + tier: "Illegal", + }, + meganium: { + tier: "OU", + }, + meganiummega: { + tier: "OU", + }, + cyndaquil: { + isNonstandard: "Past", + tier: "Illegal", + }, + quilava: { + isNonstandard: "Past", + tier: "Illegal", + }, + typhlosion: { + tier: "OU", + }, + typhlosionhisui: { + tier: "OU", + }, + totodile: { + isNonstandard: "Past", + tier: "Illegal", + }, + croconaw: { + isNonstandard: "Past", + tier: "Illegal", + }, + feraligatr: { + tier: "OU", + }, + feraligatrmega: { + tier: "OU", + }, + sentret: { + isNonstandard: "Past", + tier: "Illegal", + }, + furret: { + isNonstandard: "Past", + tier: "Illegal", + }, + hoothoot: { + isNonstandard: "Past", + tier: "Illegal", + }, + noctowl: { + isNonstandard: "Past", + tier: "Illegal", + }, + ledyba: { + isNonstandard: "Past", + tier: "Illegal", + }, + ledian: { + isNonstandard: "Past", + tier: "Illegal", + }, + spinarak: { + isNonstandard: "Past", + tier: "Illegal", + }, + ariados: { + tier: "OU", + }, + chinchou: { + isNonstandard: "Past", + tier: "Illegal", + }, + lanturn: { + isNonstandard: "Past", + tier: "Illegal", + }, + togepi: { + isNonstandard: "Past", + tier: "Illegal", + }, + togetic: { + isNonstandard: "Past", + tier: "Illegal", + }, + togekiss: { + isNonstandard: "Past", + tier: "Illegal", + }, + natu: { + isNonstandard: "Past", + tier: "Illegal", + }, + xatu: { + isNonstandard: "Past", + tier: "Illegal", + }, + mareep: { + isNonstandard: "Past", + tier: "Illegal", + }, + flaaffy: { + isNonstandard: "Past", + tier: "Illegal", + }, + ampharos: { + tier: "OU", + }, + ampharosmega: { + tier: "OU", + }, + azurill: { + isNonstandard: "Past", + tier: "Illegal", + }, + marill: { + isNonstandard: "Past", + tier: "Illegal", + }, + azumarill: { + tier: "OU", + }, + bonsly: { + isNonstandard: "Past", + tier: "Illegal", + }, + sudowoodo: { + isNonstandard: "Past", + tier: "Illegal", + }, + hoppip: { + isNonstandard: "Past", + tier: "Illegal", + }, + skiploom: { + isNonstandard: "Past", + tier: "Illegal", + }, + jumpluff: { + isNonstandard: "Past", + tier: "Illegal", + }, + aipom: { + isNonstandard: "Past", + tier: "Illegal", + }, + ambipom: { + isNonstandard: "Past", + tier: "Illegal", + }, + sunkern: { + isNonstandard: "Past", + tier: "Illegal", + }, + sunflora: { + isNonstandard: "Past", + tier: "Illegal", + }, + yanma: { + isNonstandard: "Past", + tier: "Illegal", + }, + yanmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + wooper: { + isNonstandard: "Past", + tier: "Illegal", + }, + wooperpaldea: { + isNonstandard: "Past", + tier: "Illegal", + }, + quagsire: { + isNonstandard: "Past", + tier: "Illegal", + }, + murkrow: { + isNonstandard: "Past", + tier: "Illegal", + }, + honchkrow: { + isNonstandard: "Past", + tier: "Illegal", + }, + misdreavus: { + isNonstandard: "Past", + tier: "Illegal", + }, + mismagius: { + isNonstandard: "Past", + tier: "Illegal", + }, + unown: { + isNonstandard: "Past", + tier: "Illegal", + }, + wynaut: { + isNonstandard: "Past", + tier: "Illegal", + }, + wobbuffet: { + isNonstandard: "Past", + tier: "Illegal", + }, + girafarig: { + isNonstandard: "Past", + tier: "Illegal", + }, + farigiraf: { + tier: "OU", + }, + pineco: { + isNonstandard: "Past", + tier: "Illegal", + }, + forretress: { + tier: "OU", + }, + dunsparce: { + isNonstandard: "Past", + tier: "Illegal", + }, + dudunsparce: { + isNonstandard: "Past", + tier: "Illegal", + }, + dudunsparcethreesegment: { + isNonstandard: "Past", + }, + gligar: { + isNonstandard: "Past", + tier: "Illegal", + }, + gliscor: { + tier: "OU", + }, + snubbull: { + isNonstandard: "Past", + tier: "Illegal", + }, + granbull: { + isNonstandard: "Past", + tier: "Illegal", + }, + qwilfish: { + isNonstandard: "Past", + tier: "Illegal", + }, + qwilfishhisui: { + isNonstandard: "Past", + tier: "Illegal", + }, + overqwil: { + isNonstandard: "Past", + tier: "Illegal", + }, + shuckle: { + isNonstandard: "Past", + tier: "Illegal", + }, + heracross: { + tier: "OU", + }, + heracrossmega: { + tier: "OU", + }, + sneasel: { + isNonstandard: "Past", + tier: "Illegal", + }, + sneaselhisui: { + isNonstandard: "Past", + tier: "Illegal", + }, + weavile: { + tier: "OU", + }, + sneasler: { + tier: "OU", + }, + teddiursa: { + isNonstandard: "Past", + tier: "Illegal", + }, + ursaring: { + isNonstandard: "Past", + tier: "Illegal", + }, + ursaluna: { + isNonstandard: "Past", + tier: "Illegal", + }, + ursalunabloodmoon: { + isNonstandard: "Past", + tier: "Illegal", + }, + slugma: { + isNonstandard: "Past", + tier: "Illegal", + }, + magcargo: { + isNonstandard: "Past", + tier: "Illegal", + }, + swinub: { + isNonstandard: "Past", + tier: "Illegal", + }, + piloswine: { + isNonstandard: "Past", + tier: "Illegal", + }, + mamoswine: { + tier: "OU", + }, + corsola: { + isNonstandard: "Past", + tier: "Illegal", + }, + corsolagalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + cursola: { + isNonstandard: "Past", + tier: "Illegal", + }, + remoraid: { + isNonstandard: "Past", + tier: "Illegal", + }, + octillery: { + isNonstandard: "Past", + tier: "Illegal", + }, + delibird: { + isNonstandard: "Past", + tier: "Illegal", + }, + mantyke: { + isNonstandard: "Past", + tier: "Illegal", + }, + mantine: { + isNonstandard: "Past", + tier: "Illegal", + }, + skarmory: { + tier: "OU", + }, + skarmorymega: { + tier: "OU", + }, + houndour: { + isNonstandard: "Past", + tier: "Illegal", + }, + houndoom: { + tier: "OU", + }, + houndoommega: { + tier: "OU", + }, + phanpy: { + isNonstandard: "Past", + tier: "Illegal", + }, + donphan: { + isNonstandard: "Past", + tier: "Illegal", + }, + stantler: { + isNonstandard: "Past", + tier: "Illegal", + }, + wyrdeer: { + tier: "OU", + }, + smeargle: { + isNonstandard: "Past", + tier: "Illegal", + }, + miltank: { + isNonstandard: "Past", + tier: "Illegal", + }, + raikou: { + isNonstandard: "Past", + tier: "Illegal", + }, + entei: { + isNonstandard: "Past", + tier: "Illegal", + }, + suicune: { + isNonstandard: "Past", + tier: "Illegal", + }, + larvitar: { + isNonstandard: "Past", + tier: "Illegal", + }, + pupitar: { + isNonstandard: "Past", + tier: "Illegal", + }, + tyranitar: { + tier: "OU", + }, + tyranitarmega: { + tier: "OU", + }, + lugia: { + isNonstandard: "Past", + tier: "Illegal", + }, + hooh: { + isNonstandard: "Past", + tier: "Illegal", + }, + celebi: { + isNonstandard: "Past", + tier: "Illegal", + }, + treecko: { + isNonstandard: "Past", + tier: "Illegal", + }, + grovyle: { + isNonstandard: "Past", + tier: "Illegal", + }, + sceptile: { + isNonstandard: "Past", + tier: "Illegal", + }, + sceptilemega: { + isNonstandard: "Past", + tier: "Illegal", + }, + torchic: { + isNonstandard: "Past", + tier: "Illegal", + }, + combusken: { + isNonstandard: "Past", + tier: "Illegal", + }, + blaziken: { + isNonstandard: "Past", + tier: "Illegal", + }, + blazikenmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + mudkip: { + isNonstandard: "Past", + tier: "Illegal", + }, + marshtomp: { + isNonstandard: "Past", + tier: "Illegal", + }, + swampert: { + isNonstandard: "Past", + tier: "Illegal", + }, + swampertmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + poochyena: { + isNonstandard: "Past", + tier: "Illegal", + }, + mightyena: { + isNonstandard: "Past", + tier: "Illegal", + }, + zigzagoon: { + isNonstandard: "Past", + tier: "Illegal", + }, + zigzagoongalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + linoone: { + isNonstandard: "Past", + tier: "Illegal", + }, + linoonegalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + obstagoon: { + isNonstandard: "Past", + tier: "Illegal", + }, + wurmple: { + isNonstandard: "Past", + tier: "Illegal", + }, + silcoon: { + isNonstandard: "Past", + tier: "Illegal", + }, + beautifly: { + isNonstandard: "Past", + tier: "Illegal", + }, + cascoon: { + isNonstandard: "Past", + tier: "Illegal", + }, + dustox: { + isNonstandard: "Past", + tier: "Illegal", + }, + lotad: { + isNonstandard: "Past", + tier: "Illegal", + }, + lombre: { + isNonstandard: "Past", + tier: "Illegal", + }, + ludicolo: { + isNonstandard: "Past", + tier: "Illegal", + }, + seedot: { + isNonstandard: "Past", + tier: "Illegal", + }, + nuzleaf: { + isNonstandard: "Past", + tier: "Illegal", + }, + shiftry: { + isNonstandard: "Past", + tier: "Illegal", + }, + taillow: { + isNonstandard: "Past", + tier: "Illegal", + }, + swellow: { + isNonstandard: "Past", + tier: "Illegal", + }, + wingull: { + isNonstandard: "Past", + tier: "Illegal", + }, + pelipper: { + tier: "OU", + }, + ralts: { + isNonstandard: "Past", + tier: "Illegal", + }, + kirlia: { + isNonstandard: "Past", + tier: "Illegal", + }, + gardevoir: { + tier: "OU", + }, + gardevoirmega: { + tier: "OU", + }, + gallade: { + tier: "OU", + }, + gallademega: { + tier: "OU", + }, + surskit: { + isNonstandard: "Past", + tier: "Illegal", + }, + masquerain: { + isNonstandard: "Past", + tier: "Illegal", + }, + shroomish: { + isNonstandard: "Past", + tier: "Illegal", + }, + breloom: { + isNonstandard: "Past", + tier: "Illegal", + }, + slakoth: { + isNonstandard: "Past", + tier: "Illegal", + }, + vigoroth: { + isNonstandard: "Past", + tier: "Illegal", + }, + slaking: { + isNonstandard: "Past", + tier: "Illegal", + }, + nincada: { + isNonstandard: "Past", + tier: "Illegal", + }, + ninjask: { + isNonstandard: "Past", + tier: "Illegal", + }, + shedinja: { + isNonstandard: "Past", + tier: "Illegal", + }, + whismur: { + isNonstandard: "Past", + tier: "Illegal", + }, + loudred: { + isNonstandard: "Past", + tier: "Illegal", + }, + exploud: { + isNonstandard: "Past", + tier: "Illegal", + }, + makuhita: { + isNonstandard: "Past", + tier: "Illegal", + }, + hariyama: { + isNonstandard: "Past", + tier: "Illegal", + }, + nosepass: { + isNonstandard: "Past", + tier: "Illegal", + }, + probopass: { + isNonstandard: "Past", + tier: "Illegal", + }, + skitty: { + isNonstandard: "Past", + tier: "Illegal", + }, + delcatty: { + isNonstandard: "Past", + tier: "Illegal", + }, + sableye: { + tier: "OU", + }, + sableyemega: { + tier: "OU", + }, + mawile: { + isNonstandard: "Past", + tier: "Illegal", + }, + mawilemega: { + isNonstandard: "Past", + tier: "Illegal", + }, + aron: { + isNonstandard: "Past", + tier: "Illegal", + }, + lairon: { + isNonstandard: "Past", + tier: "Illegal", + }, + aggron: { + tier: "OU", + }, + aggronmega: { + tier: "OU", + }, + meditite: { + isNonstandard: "Past", + tier: "Illegal", + }, + medicham: { + tier: "OU", + }, + medichammega: { + tier: "OU", + }, + electrike: { + isNonstandard: "Past", + tier: "Illegal", + }, + manectric: { + tier: "OU", + }, + manectricmega: { + tier: "OU", + }, + plusle: { + isNonstandard: "Past", + tier: "Illegal", + }, + minun: { + isNonstandard: "Past", + tier: "Illegal", + }, + volbeat: { + isNonstandard: "Past", + tier: "Illegal", + }, + illumise: { + isNonstandard: "Past", + tier: "Illegal", + }, + budew: { + isNonstandard: "Past", + tier: "Illegal", + }, + roselia: { + isNonstandard: "Past", + tier: "Illegal", + }, + roserade: { + tier: "OU", + }, + gulpin: { + isNonstandard: "Past", + tier: "Illegal", + }, + swalot: { + isNonstandard: "Past", + tier: "Illegal", + }, + carvanha: { + isNonstandard: "Past", + tier: "Illegal", + }, + sharpedo: { + tier: "OU", + }, + sharpedomega: { + tier: "OU", + }, + wailmer: { + isNonstandard: "Past", + tier: "Illegal", + }, + wailord: { + isNonstandard: "Past", + tier: "Illegal", + }, + numel: { + isNonstandard: "Past", + tier: "Illegal", + }, + camerupt: { + tier: "OU", + }, + cameruptmega: { + tier: "OU", + }, + torkoal: { + tier: "OU", + }, + spoink: { + isNonstandard: "Past", + tier: "Illegal", + }, + grumpig: { + isNonstandard: "Past", + tier: "Illegal", + }, + spinda: { + isNonstandard: "Past", + tier: "Illegal", + }, + trapinch: { + isNonstandard: "Past", + tier: "Illegal", + }, + vibrava: { + isNonstandard: "Past", + tier: "Illegal", + }, + flygon: { + isNonstandard: "Past", + tier: "Illegal", + }, + cacnea: { + isNonstandard: "Past", + tier: "Illegal", + }, + cacturne: { + isNonstandard: "Past", + tier: "Illegal", + }, + swablu: { + isNonstandard: "Past", + tier: "Illegal", + }, + altaria: { + tier: "OU", + }, + altariamega: { + tier: "OU", + }, + zangoose: { + isNonstandard: "Past", + tier: "Illegal", + }, + seviper: { + isNonstandard: "Past", + tier: "Illegal", + }, + lunatone: { + isNonstandard: "Past", + tier: "Illegal", + }, + solrock: { + isNonstandard: "Past", + tier: "Illegal", + }, + barboach: { + isNonstandard: "Past", + tier: "Illegal", + }, + whiscash: { + isNonstandard: "Past", + tier: "Illegal", + }, + corphish: { + isNonstandard: "Past", + tier: "Illegal", + }, + crawdaunt: { + isNonstandard: "Past", + tier: "Illegal", + }, + baltoy: { + isNonstandard: "Past", + tier: "Illegal", + }, + claydol: { + isNonstandard: "Past", + tier: "Illegal", + }, + lileep: { + isNonstandard: "Past", + tier: "Illegal", + }, + cradily: { + isNonstandard: "Past", + tier: "Illegal", + }, + anorith: { + isNonstandard: "Past", + tier: "Illegal", + }, + armaldo: { + isNonstandard: "Past", + tier: "Illegal", + }, + feebas: { + isNonstandard: "Past", + tier: "Illegal", + }, + milotic: { + tier: "OU", + }, + castform: { + tier: "OU", + }, + castformsunny: { + isNonstandard: "Past", + }, + castformrainy: { + isNonstandard: "Past", + }, + castformsnowy: { + isNonstandard: "Past", + }, + kecleon: { + isNonstandard: "Past", + tier: "Illegal", + }, + shuppet: { + isNonstandard: "Past", + tier: "Illegal", + }, + banette: { + tier: "OU", + }, + banettemega: { + tier: "OU", + }, + duskull: { + isNonstandard: "Past", + tier: "Illegal", + }, + dusclops: { + isNonstandard: "Past", + tier: "Illegal", + }, + dusknoir: { + isNonstandard: "Past", + tier: "Illegal", + }, + tropius: { + isNonstandard: "Past", + tier: "Illegal", + }, + chingling: { + isNonstandard: "Past", + tier: "Illegal", + }, + chimecho: { + tier: "OU", + }, + chimechomega: { + tier: "OU", + }, + absol: { + tier: "OU", + }, + absolmega: { + tier: "OU", + }, + absolmegaz: { + isNonstandard: "Past", + tier: "Illegal", + }, + snorunt: { + isNonstandard: "Past", + tier: "Illegal", + }, + glalie: { + tier: "OU", + }, + glaliemega: { + tier: "OU", + }, + froslass: { + tier: "OU", + }, + froslassmega: { + tier: "OU", + }, + spheal: { + isNonstandard: "Past", + tier: "Illegal", + }, + sealeo: { + isNonstandard: "Past", + tier: "Illegal", + }, + walrein: { + isNonstandard: "Past", + tier: "Illegal", + }, + clamperl: { + isNonstandard: "Past", + tier: "Illegal", + }, + huntail: { + isNonstandard: "Past", + tier: "Illegal", + }, + gorebyss: { + isNonstandard: "Past", + tier: "Illegal", + }, + relicanth: { + isNonstandard: "Past", + tier: "Illegal", + }, + luvdisc: { + isNonstandard: "Past", + tier: "Illegal", + }, + bagon: { + isNonstandard: "Past", + tier: "Illegal", + }, + shelgon: { + isNonstandard: "Past", + tier: "Illegal", + }, + salamence: { + isNonstandard: "Past", + tier: "Illegal", + }, + salamencemega: { + isNonstandard: "Past", + tier: "Illegal", + }, + beldum: { + isNonstandard: "Past", + tier: "Illegal", + }, + metang: { + isNonstandard: "Past", + tier: "Illegal", + }, + metagross: { + isNonstandard: "Past", + tier: "Illegal", + }, + metagrossmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + regirock: { + isNonstandard: "Past", + tier: "Illegal", + }, + regice: { + isNonstandard: "Past", + tier: "Illegal", + }, + registeel: { + isNonstandard: "Past", + tier: "Illegal", + }, + latias: { + isNonstandard: "Past", + tier: "Illegal", + }, + latiasmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + latios: { + isNonstandard: "Past", + tier: "Illegal", + }, + latiosmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + kyogre: { + isNonstandard: "Past", + tier: "Illegal", + }, + kyogreprimal: { + isNonstandard: "Past", + tier: "Illegal", + }, + groudon: { + isNonstandard: "Past", + tier: "Illegal", + }, + groudonprimal: { + isNonstandard: "Past", + tier: "Illegal", + }, + rayquaza: { + isNonstandard: "Past", + tier: "Illegal", + }, + rayquazamega: { + isNonstandard: "Past", + tier: "Illegal", + }, + jirachi: { + isNonstandard: "Past", + tier: "Illegal", + }, + deoxys: { + isNonstandard: "Past", + tier: "Illegal", + }, + deoxysattack: { + isNonstandard: "Past", + tier: "Illegal", + }, + deoxysdefense: { + isNonstandard: "Past", + tier: "Illegal", + }, + deoxysspeed: { + isNonstandard: "Past", + tier: "Illegal", + }, + turtwig: { + isNonstandard: "Past", + tier: "Illegal", + }, + grotle: { + isNonstandard: "Past", + tier: "Illegal", + }, + torterra: { + tier: "OU", + }, + chimchar: { + isNonstandard: "Past", + tier: "Illegal", + }, + monferno: { + isNonstandard: "Past", + tier: "Illegal", + }, + infernape: { + tier: "OU", + }, + piplup: { + isNonstandard: "Past", + tier: "Illegal", + }, + prinplup: { + isNonstandard: "Past", + tier: "Illegal", + }, + empoleon: { + tier: "OU", + }, + starly: { + isNonstandard: "Past", + tier: "Illegal", + }, + staravia: { + isNonstandard: "Past", + tier: "Illegal", + }, + staraptor: { + isNonstandard: "Past", + tier: "Illegal", + }, + staraptormega: { + isNonstandard: "Future", + tier: "Illegal", + }, + bidoof: { + isNonstandard: "Past", + tier: "Illegal", + }, + bibarel: { + isNonstandard: "Past", + tier: "Illegal", + }, + kricketot: { + isNonstandard: "Past", + tier: "Illegal", + }, + kricketune: { + isNonstandard: "Past", + tier: "Illegal", + }, + shinx: { + isNonstandard: "Past", + tier: "Illegal", + }, + luxio: { + isNonstandard: "Past", + tier: "Illegal", + }, + luxray: { + tier: "OU", + }, + cranidos: { + isNonstandard: "Past", + tier: "Illegal", + }, + rampardos: { + tier: "OU", + }, + shieldon: { + isNonstandard: "Past", + tier: "Illegal", + }, + bastiodon: { + tier: "OU", + }, + burmy: { + isNonstandard: "Past", + tier: "Illegal", + }, + wormadam: { + isNonstandard: "Past", + tier: "Illegal", + }, + wormadamsandy: { + isNonstandard: "Past", + tier: "Illegal", + }, + wormadamtrash: { + isNonstandard: "Past", + tier: "Illegal", + }, + mothim: { + isNonstandard: "Past", + tier: "Illegal", + }, + combee: { + isNonstandard: "Past", + tier: "Illegal", + }, + vespiquen: { + isNonstandard: "Past", + tier: "Illegal", + }, + pachirisu: { + isNonstandard: "Past", + tier: "Illegal", + }, + buizel: { + isNonstandard: "Past", + tier: "Illegal", + }, + floatzel: { + isNonstandard: "Past", + tier: "Illegal", + }, + cherubi: { + isNonstandard: "Past", + tier: "Illegal", + }, + cherrim: { + isNonstandard: "Past", + tier: "Illegal", + }, + cherrimsunshine: { + isNonstandard: "Past", + }, + shellos: { + isNonstandard: "Past", + tier: "Illegal", + }, + gastrodon: { + isNonstandard: "Past", + tier: "Illegal", + }, + drifloon: { + isNonstandard: "Past", + tier: "Illegal", + }, + drifblim: { + isNonstandard: "Past", + tier: "Illegal", + }, + buneary: { + isNonstandard: "Past", + tier: "Illegal", + }, + lopunny: { + tier: "OU", + }, + lopunnymega: { + tier: "OU", + }, + glameow: { + isNonstandard: "Past", + tier: "Illegal", + }, + purugly: { + isNonstandard: "Past", + tier: "Illegal", + }, + stunky: { + isNonstandard: "Past", + tier: "Illegal", + }, + skuntank: { + isNonstandard: "Past", + tier: "Illegal", + }, + bronzor: { + isNonstandard: "Past", + tier: "Illegal", + }, + bronzong: { + isNonstandard: "Past", + tier: "Illegal", + }, + chatot: { + isNonstandard: "Past", + tier: "Illegal", + }, + spiritomb: { + tier: "OU", + }, + gible: { + isNonstandard: "Past", + tier: "Illegal", + }, + gabite: { + isNonstandard: "Past", + tier: "Illegal", + }, + garchomp: { + tier: "OU", + }, + garchompmega: { + tier: "OU", + }, + garchompmegaz: { + isNonstandard: "Past", + tier: "Illegal", + }, + riolu: { + isNonstandard: "Past", + tier: "Illegal", + }, + lucario: { + tier: "OU", + }, + lucariomega: { + tier: "Uber", + }, + lucariomegaz: { + isNonstandard: "Past", + tier: "Illegal", + }, + hippopotas: { + isNonstandard: "Past", + tier: "Illegal", + }, + hippowdon: { + tier: "OU", + }, + skorupi: { + isNonstandard: "Past", + tier: "Illegal", + }, + drapion: { + isNonstandard: "Past", + tier: "Illegal", + }, + croagunk: { + isNonstandard: "Past", + tier: "Illegal", + }, + toxicroak: { + tier: "OU", + }, + carnivine: { + isNonstandard: "Past", + tier: "Illegal", + }, + finneon: { + isNonstandard: "Past", + tier: "Illegal", + }, + lumineon: { + isNonstandard: "Past", + tier: "Illegal", + }, + snover: { + isNonstandard: "Past", + tier: "Illegal", + }, + abomasnow: { + tier: "OU", + }, + abomasnowmega: { + tier: "OU", + }, + rotom: { + tier: "OU", + }, + rotomheat: { + tier: "OU", + }, + rotomwash: { + tier: "OU", + }, + rotomfrost: { + tier: "OU", + }, + rotomfan: { + tier: "OU", + }, + rotommow: { + tier: "OU", + }, + uxie: { + isNonstandard: "Past", + tier: "Illegal", + }, + mesprit: { + isNonstandard: "Past", + tier: "Illegal", + }, + azelf: { + isNonstandard: "Past", + tier: "Illegal", + }, + dialga: { + isNonstandard: "Past", + tier: "Illegal", + }, + dialgaorigin: { + isNonstandard: "Past", + tier: "Illegal", + }, + palkia: { + isNonstandard: "Past", + tier: "Illegal", + }, + palkiaorigin: { + isNonstandard: "Past", + tier: "Illegal", + }, + heatran: { + isNonstandard: "Past", + tier: "Illegal", + }, + heatranmega: { + isNonstandard: "Future", + tier: "Illegal", + }, + regigigas: { + isNonstandard: "Past", + tier: "Illegal", + }, + giratina: { + isNonstandard: "Past", + tier: "Illegal", + }, + giratinaorigin: { + isNonstandard: "Past", + tier: "Illegal", + }, + cresselia: { + isNonstandard: "Past", + tier: "Illegal", + }, + phione: { + isNonstandard: "Past", + tier: "Illegal", + }, + manaphy: { + isNonstandard: "Past", + tier: "Illegal", + }, + darkrai: { + isNonstandard: "Past", + tier: "Illegal", + }, + darkraimega: { + isNonstandard: "Future", + tier: "Illegal", + }, + shaymin: { + isNonstandard: "Past", + tier: "Illegal", + }, + shayminsky: { + isNonstandard: "Past", + tier: "Illegal", + }, + arceus: { + isNonstandard: "Past", + tier: "Illegal", + }, + arceusbug: { + isNonstandard: "Past", + }, + arceusdark: { + isNonstandard: "Past", + }, + arceusdragon: { + isNonstandard: "Past", + }, + arceuselectric: { + isNonstandard: "Past", + }, + arceusfairy: { + isNonstandard: "Past", + }, + arceusfighting: { + isNonstandard: "Past", + }, + arceusfire: { + isNonstandard: "Past", + }, + arceusflying: { + isNonstandard: "Past", + }, + arceusghost: { + isNonstandard: "Past", + }, + arceusgrass: { + isNonstandard: "Past", + }, + arceusground: { + isNonstandard: "Past", + }, + arceusice: { + isNonstandard: "Past", + }, + arceuspoison: { + isNonstandard: "Past", + }, + arceuspsychic: { + isNonstandard: "Past", + }, + arceusrock: { + isNonstandard: "Past", + }, + arceussteel: { + isNonstandard: "Past", + }, + arceuswater: { + isNonstandard: "Past", + }, + victini: { + isNonstandard: "Past", + tier: "Illegal", + }, + snivy: { + isNonstandard: "Past", + tier: "Illegal", + }, + servine: { + isNonstandard: "Past", + tier: "Illegal", + }, + serperior: { + tier: "OU", + }, + tepig: { + isNonstandard: "Past", + tier: "Illegal", + }, + pignite: { + isNonstandard: "Past", + tier: "Illegal", + }, + emboar: { + tier: "OU", + }, + emboarmega: { + tier: "OU", + }, + oshawott: { + isNonstandard: "Past", + tier: "Illegal", + }, + dewott: { + isNonstandard: "Past", + tier: "Illegal", + }, + samurott: { + tier: "OU", + }, + samurotthisui: { + tier: "OU", + }, + patrat: { + isNonstandard: "Past", + tier: "Illegal", + }, + watchog: { + tier: "OU", + }, + lillipup: { + isNonstandard: "Past", + tier: "Illegal", + }, + herdier: { + isNonstandard: "Past", + tier: "Illegal", + }, + stoutland: { + isNonstandard: "Past", + tier: "Illegal", + }, + purrloin: { + isNonstandard: "Past", + tier: "Illegal", + }, + liepard: { + tier: "OU", + }, + pansage: { + isNonstandard: "Past", + tier: "Illegal", + }, + simisage: { + tier: "OU", + }, + pansear: { + isNonstandard: "Past", + tier: "Illegal", + }, + simisear: { + tier: "OU", + }, + panpour: { + isNonstandard: "Past", + tier: "Illegal", + }, + simipour: { + tier: "OU", + }, + munna: { + isNonstandard: "Past", + tier: "Illegal", + }, + musharna: { + isNonstandard: "Past", + tier: "Illegal", + }, + pidove: { + isNonstandard: "Past", + tier: "Illegal", + }, + tranquill: { + isNonstandard: "Past", + tier: "Illegal", + }, + unfezant: { + isNonstandard: "Past", + tier: "Illegal", + }, + blitzle: { + isNonstandard: "Past", + tier: "Illegal", + }, + zebstrika: { + isNonstandard: "Past", + tier: "Illegal", + }, + roggenrola: { + isNonstandard: "Past", + tier: "Illegal", + }, + boldore: { + isNonstandard: "Past", + tier: "Illegal", + }, + gigalith: { + isNonstandard: "Past", + tier: "Illegal", + }, + woobat: { + isNonstandard: "Past", + tier: "Illegal", + }, + swoobat: { + isNonstandard: "Past", + tier: "Illegal", + }, + drilbur: { + isNonstandard: "Past", + tier: "Illegal", + }, + excadrill: { + tier: "OU", + }, + excadrillmega: { + tier: "OU", + }, + audino: { + tier: "OU", + }, + audinomega: { + tier: "OU", + }, + timburr: { + isNonstandard: "Past", + tier: "Illegal", + }, + gurdurr: { + isNonstandard: "Past", + tier: "Illegal", + }, + conkeldurr: { + tier: "OU", + }, + tympole: { + isNonstandard: "Past", + tier: "Illegal", + }, + palpitoad: { + isNonstandard: "Past", + tier: "Illegal", + }, + seismitoad: { + isNonstandard: "Past", + tier: "Illegal", + }, + throh: { + isNonstandard: "Past", + tier: "Illegal", + }, + sawk: { + isNonstandard: "Past", + tier: "Illegal", + }, + sewaddle: { + isNonstandard: "Past", + tier: "Illegal", + }, + swadloon: { + isNonstandard: "Past", + tier: "Illegal", + }, + leavanny: { + isNonstandard: "Past", + tier: "Illegal", + }, + venipede: { + isNonstandard: "Past", + tier: "Illegal", + }, + whirlipede: { + isNonstandard: "Past", + tier: "Illegal", + }, + scolipede: { + isNonstandard: "Past", + tier: "Illegal", + }, + scolipedemega: { + isNonstandard: "Future", + tier: "Illegal", + }, + cottonee: { + isNonstandard: "Past", + tier: "Illegal", + }, + whimsicott: { + tier: "OU", + }, + petilil: { + isNonstandard: "Past", + tier: "Illegal", + }, + lilligant: { + isNonstandard: "Past", + tier: "Illegal", + }, + lilliganthisui: { + isNonstandard: "Past", + tier: "Illegal", + }, + basculin: { + isNonstandard: "Past", + tier: "Illegal", + }, + basculinbluestriped: { + isNonstandard: "Past", + }, + basculinwhitestriped: { + isNonstandard: "Past", + }, + basculegion: { + tier: "OU", + }, + basculegionf: { + tier: "OU", + }, + sandile: { + isNonstandard: "Past", + tier: "Illegal", + }, + krokorok: { + isNonstandard: "Past", + tier: "Illegal", + }, + krookodile: { + tier: "OU", + }, + darumaka: { + isNonstandard: "Past", + tier: "Illegal", + }, + darumakagalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + darmanitan: { + isNonstandard: "Past", + tier: "Illegal", + }, + darmanitanzen: { + isNonstandard: "Past", + }, + darmanitangalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + darmanitangalarzen: { + isNonstandard: "Past", + }, + maractus: { + isNonstandard: "Past", + tier: "Illegal", + }, + dwebble: { + isNonstandard: "Past", + tier: "Illegal", + }, + crustle: { + isNonstandard: "Past", + tier: "Illegal", + }, + scraggy: { + isNonstandard: "Past", + tier: "Illegal", + }, + scrafty: { + isNonstandard: "Past", + tier: "Illegal", + }, + scraftymega: { + isNonstandard: "Future", + tier: "Illegal", + }, + sigilyph: { + isNonstandard: "Past", + tier: "Illegal", + }, + yamask: { + isNonstandard: "Past", + tier: "Illegal", + }, + yamaskgalar: { + isNonstandard: "Past", + tier: "Illegal", + }, + cofagrigus: { + tier: "OU", + }, + runerigus: { + tier: "OU", + }, + tirtouga: { + isNonstandard: "Past", + tier: "Illegal", + }, + carracosta: { + isNonstandard: "Past", + tier: "Illegal", + }, + archen: { + isNonstandard: "Past", + tier: "Illegal", + }, + archeops: { + isNonstandard: "Past", + tier: "Illegal", + }, + trubbish: { + isNonstandard: "Past", + tier: "Illegal", + }, + garbodor: { + tier: "OU", + }, + garbodorgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + zorua: { + isNonstandard: "Past", + tier: "Illegal", + }, + zoruahisui: { + isNonstandard: "Past", + tier: "Illegal", + }, + zoroark: { + tier: "OU", + }, + zoroarkhisui: { + tier: "OU", + }, + minccino: { + isNonstandard: "Past", + tier: "Illegal", + }, + cinccino: { + isNonstandard: "Past", + tier: "Illegal", + }, + gothita: { + isNonstandard: "Past", + tier: "Illegal", + }, + gothorita: { + isNonstandard: "Past", + tier: "Illegal", + }, + gothitelle: { + isNonstandard: "Past", + tier: "Illegal", + }, + solosis: { + isNonstandard: "Past", + tier: "Illegal", + }, + duosion: { + isNonstandard: "Past", + tier: "Illegal", + }, + reuniclus: { + tier: "OU", + }, + ducklett: { + isNonstandard: "Past", + tier: "Illegal", + }, + swanna: { + isNonstandard: "Past", + tier: "Illegal", + }, + vanillite: { + isNonstandard: "Past", + tier: "Illegal", + }, + vanillish: { + isNonstandard: "Past", + tier: "Illegal", + }, + vanilluxe: { + tier: "OU", + }, + deerling: { + isNonstandard: "Past", + tier: "Illegal", + }, + sawsbuck: { + isNonstandard: "Past", + tier: "Illegal", + }, + emolga: { + tier: "OU", + }, + karrablast: { + isNonstandard: "Past", + tier: "Illegal", + }, + escavalier: { + isNonstandard: "Past", + tier: "Illegal", + }, + foongus: { + isNonstandard: "Past", + tier: "Illegal", + }, + amoonguss: { + isNonstandard: "Past", + tier: "Illegal", + }, + frillish: { + isNonstandard: "Past", + tier: "Illegal", + }, + jellicent: { + isNonstandard: "Past", + tier: "Illegal", + }, + alomomola: { + isNonstandard: "Past", + tier: "Illegal", + }, + joltik: { + isNonstandard: "Past", + tier: "Illegal", + }, + galvantula: { + isNonstandard: "Past", + tier: "Illegal", + }, + ferroseed: { + isNonstandard: "Past", + tier: "Illegal", + }, + ferrothorn: { + isNonstandard: "Past", + tier: "Illegal", + }, + klink: { + isNonstandard: "Past", + tier: "Illegal", + }, + klang: { + isNonstandard: "Past", + tier: "Illegal", + }, + klinklang: { + isNonstandard: "Past", + tier: "Illegal", + }, + tynamo: { + isNonstandard: "Past", + tier: "Illegal", + }, + eelektrik: { + isNonstandard: "Past", + tier: "Illegal", + }, + eelektross: { + isNonstandard: "Past", + tier: "Illegal", + }, + eelektrossmega: { + isNonstandard: "Future", + tier: "Illegal", + }, + elgyem: { + isNonstandard: "Past", + tier: "Illegal", + }, + beheeyem: { + isNonstandard: "Past", + tier: "Illegal", + }, + litwick: { + isNonstandard: "Past", + tier: "Illegal", + }, + lampent: { + isNonstandard: "Past", + tier: "Illegal", + }, + chandelure: { + tier: "OU", + }, + chandeluremega: { + tier: "OU", + }, + axew: { + isNonstandard: "Past", + tier: "Illegal", + }, + fraxure: { + isNonstandard: "Past", + tier: "Illegal", + }, + haxorus: { + isNonstandard: "Past", + tier: "Illegal", + }, + cubchoo: { + isNonstandard: "Past", + tier: "Illegal", + }, + beartic: { + tier: "OU", + }, + cryogonal: { + isNonstandard: "Past", + tier: "Illegal", + }, + shelmet: { + isNonstandard: "Past", + tier: "Illegal", + }, + accelgor: { + isNonstandard: "Past", + tier: "Illegal", + }, + stunfisk: { + tier: "OU", + }, + stunfiskgalar: { + tier: "OU", + }, + mienfoo: { + isNonstandard: "Past", + tier: "Illegal", + }, + mienshao: { + isNonstandard: "Past", + tier: "Illegal", + }, + druddigon: { + isNonstandard: "Past", + tier: "Illegal", + }, + golett: { + isNonstandard: "Past", + tier: "Illegal", + }, + golurk: { + tier: "OU", + }, + golurkmega: { + tier: "OU", + }, + pawniard: { + isNonstandard: "Past", + tier: "Illegal", + }, + bisharp: { + isNonstandard: "Past", + tier: "Illegal", + }, + bouffalant: { + isNonstandard: "Past", + tier: "Illegal", + }, + rufflet: { + isNonstandard: "Past", + tier: "Illegal", + }, + braviary: { + isNonstandard: "Past", + tier: "Illegal", + }, + braviaryhisui: { + isNonstandard: "Past", + tier: "Illegal", + }, + vullaby: { + isNonstandard: "Past", + tier: "Illegal", + }, + mandibuzz: { + isNonstandard: "Past", + tier: "Illegal", + }, + heatmor: { + isNonstandard: "Past", + tier: "Illegal", + }, + durant: { + isNonstandard: "Past", + tier: "Illegal", + }, + deino: { + isNonstandard: "Past", + tier: "Illegal", + }, + zweilous: { + isNonstandard: "Past", + tier: "Illegal", + }, + hydreigon: { + tier: "OU", + }, + larvesta: { + isNonstandard: "Past", + tier: "Illegal", + }, + volcarona: { + tier: "OU", + }, + cobalion: { + isNonstandard: "Past", + tier: "Illegal", + }, + terrakion: { + isNonstandard: "Past", + tier: "Illegal", + }, + virizion: { + isNonstandard: "Past", + tier: "Illegal", + }, + tornadus: { + isNonstandard: "Past", + tier: "Illegal", + }, + tornadustherian: { + isNonstandard: "Past", + tier: "Illegal", + }, + thundurus: { + isNonstandard: "Past", + tier: "Illegal", + }, + thundurustherian: { + isNonstandard: "Past", + tier: "Illegal", + }, + reshiram: { + isNonstandard: "Past", + tier: "Illegal", + }, + zekrom: { + isNonstandard: "Past", + tier: "Illegal", + }, + landorus: { + isNonstandard: "Past", + tier: "Illegal", + }, + landorustherian: { + isNonstandard: "Past", + tier: "Illegal", + }, + kyurem: { + isNonstandard: "Past", + tier: "Illegal", + }, + kyuremblack: { + isNonstandard: "Past", + tier: "Illegal", + }, + kyuremwhite: { + isNonstandard: "Past", + tier: "Illegal", + }, + keldeo: { + isNonstandard: "Past", + tier: "Illegal", + }, + keldeoresolute: { + isNonstandard: "Past", + }, + meloetta: { + isNonstandard: "Past", + tier: "Illegal", + }, + genesect: { + isNonstandard: "Past", + tier: "Illegal", + }, + genesectburn: { + isNonstandard: "Past", + tier: "Illegal", + }, + genesectchill: { + isNonstandard: "Past", + tier: "Illegal", + }, + genesectdouse: { + isNonstandard: "Past", + tier: "Illegal", + }, + genesectshock: { + isNonstandard: "Past", + tier: "Illegal", + }, + chespin: { + isNonstandard: "Past", + tier: "Illegal", + }, + quilladin: { + isNonstandard: "Past", + tier: "Illegal", + }, + chesnaught: { + tier: "OU", + }, + chesnaughtmega: { + tier: "OU", + }, + fennekin: { + isNonstandard: "Past", + tier: "Illegal", + }, + braixen: { + isNonstandard: "Past", + tier: "Illegal", + }, + delphox: { + tier: "OU", + }, + delphoxmega: { + tier: "OU", + }, + froakie: { + isNonstandard: "Past", + tier: "Illegal", + }, + frogadier: { + isNonstandard: "Past", + tier: "Illegal", + }, + greninja: { + tier: "OU", + }, + greninjaash: { + isNonstandard: "Past", + tier: "Illegal", + }, + greninjabond: { + isNonstandard: "Past", + tier: "Illegal", + }, + greninjamega: { + tier: "OU", + }, + bunnelby: { + isNonstandard: "Past", + tier: "Illegal", + }, + diggersby: { + tier: "OU", + }, + fletchling: { + isNonstandard: "Past", + tier: "Illegal", + }, + fletchinder: { + isNonstandard: "Past", + tier: "Illegal", + }, + talonflame: { + tier: "OU", + }, + scatterbug: { + isNonstandard: "Past", + tier: "Illegal", + }, + spewpa: { + isNonstandard: "Past", + tier: "Illegal", + }, + vivillon: { + tier: "OU", + }, + litleo: { + isNonstandard: "Past", + tier: "Illegal", + }, + pyroar: { + isNonstandard: "Past", + tier: "Illegal", + }, + pyroarmega: { + isNonstandard: "Future", + tier: "Illegal", + }, + flabebe: { + isNonstandard: "Past", + tier: "Illegal", + }, + floette: { + isNonstandard: "Past", + tier: "Illegal", + }, + floetteeternal: { + tier: "OU", + }, + floettemega: { + tier: "OU", + }, + florges: { + tier: "OU", + }, + skiddo: { + isNonstandard: "Past", + tier: "Illegal", + }, + gogoat: { + isNonstandard: "Past", + tier: "Illegal", + }, + pancham: { + isNonstandard: "Past", + tier: "Illegal", + }, + pangoro: { + tier: "OU", + }, + furfrou: { + tier: "OU", + }, + espurr: { + isNonstandard: "Past", + tier: "Illegal", + }, + meowstic: { + tier: "OU", + }, + meowsticmmega: { + tier: "OU", + }, + meowsticfmega: { + tier: "OU", + }, + honedge: { + isNonstandard: "Past", + tier: "Illegal", + }, + doublade: { + isNonstandard: "Past", + tier: "Illegal", + }, + aegislash: { + tier: "OU", + }, + aegislashblade: { + isNonstandard: "Past", + }, + spritzee: { + isNonstandard: "Past", + tier: "Illegal", + }, + aromatisse: { + tier: "OU", + }, + swirlix: { + isNonstandard: "Past", + tier: "Illegal", + }, + slurpuff: { + tier: "OU", + }, + inkay: { + isNonstandard: "Past", + tier: "Illegal", + }, + malamar: { + isNonstandard: "Past", + tier: "Illegal", + }, + malamarmega: { + isNonstandard: "Future", + tier: "Illegal", + }, + binacle: { + isNonstandard: "Past", + tier: "Illegal", + }, + barbaracle: { + isNonstandard: "Past", + tier: "Illegal", + }, + barbaraclemega: { + isNonstandard: "Future", + tier: "Illegal", + }, + skrelp: { + isNonstandard: "Past", + tier: "Illegal", + }, + dragalge: { + isNonstandard: "Past", + tier: "Illegal", + }, + dragalgemega: { + isNonstandard: "Future", + tier: "Illegal", + }, + clauncher: { + isNonstandard: "Past", + tier: "Illegal", + }, + clawitzer: { + tier: "OU", + }, + helioptile: { + isNonstandard: "Past", + tier: "Illegal", + }, + heliolisk: { + tier: "OU", + }, + tyrunt: { + isNonstandard: "Past", + tier: "Illegal", + }, + tyrantrum: { + tier: "OU", + }, + amaura: { + isNonstandard: "Past", + tier: "Illegal", + }, + aurorus: { + tier: "OU", + }, + hawlucha: { + tier: "OU", + }, + hawluchamega: { + tier: "OU", + }, + dedenne: { + tier: "OU", + }, + carbink: { + isNonstandard: "Past", + tier: "Illegal", + }, + goomy: { + isNonstandard: "Past", + tier: "Illegal", + }, + sliggoo: { + isNonstandard: "Past", + tier: "Illegal", + }, + sliggoohisui: { + isNonstandard: "Past", + tier: "Illegal", + }, + goodra: { + tier: "OU", + }, + goodrahisui: { + tier: "OU", + }, + klefki: { + tier: "OU", + }, + phantump: { + isNonstandard: "Past", + tier: "Illegal", + }, + trevenant: { + tier: "OU", + }, + pumpkaboo: { + isNonstandard: "Past", + tier: "Illegal", + }, + pumpkaboosmall: { + isNonstandard: "Past", + }, + pumpkaboolarge: { + isNonstandard: "Past", + }, + pumpkaboosuper: { + isNonstandard: "Past", + }, + gourgeist: { + tier: "OU", + }, + gourgeistsmall: { + tier: "OU", + }, + gourgeistlarge: { + tier: "OU", + }, + gourgeistsuper: { + tier: "OU", + }, + bergmite: { + isNonstandard: "Past", + tier: "Illegal", + }, + avalugg: { + tier: "OU", + }, + avalugghisui: { + tier: "OU", + }, + noibat: { + isNonstandard: "Past", + tier: "Illegal", + }, + noivern: { + tier: "OU", + }, + xerneas: { + isNonstandard: "Past", + tier: "Illegal", + }, + xerneasneutral: { + isNonstandard: "Custom", // can't be used in battle + tier: "Illegal", + }, + yveltal: { + isNonstandard: "Past", + tier: "Illegal", + }, + zygarde: { + isNonstandard: "Past", + tier: "Illegal", + }, + zygarde10: { + isNonstandard: "Past", + tier: "Illegal", + }, + zygardecomplete: { + isNonstandard: "Past", + tier: "Illegal", + }, + zygardemega: { + isNonstandard: "Future", + tier: "Illegal", + }, + diancie: { + isNonstandard: "Past", + tier: "Illegal", + }, + dianciemega: { + isNonstandard: "Past", + tier: "Illegal", + }, + hoopa: { + isNonstandard: "Past", + tier: "Illegal", + }, + hoopaunbound: { + isNonstandard: "Past", + tier: "Illegal", + }, + volcanion: { + isNonstandard: "Past", + tier: "Illegal", + }, + rowlet: { + isNonstandard: "Past", + tier: "Illegal", + }, + dartrix: { + isNonstandard: "Past", + tier: "Illegal", + }, + decidueye: { + tier: "OU", + }, + decidueyehisui: { + tier: "OU", + }, + litten: { + isNonstandard: "Past", + tier: "Illegal", + }, + torracat: { + isNonstandard: "Past", + tier: "Illegal", + }, + incineroar: { + tier: "OU", + }, + popplio: { + isNonstandard: "Past", + tier: "Illegal", + }, + brionne: { + isNonstandard: "Past", + tier: "Illegal", + }, + primarina: { + tier: "OU", + }, + pikipek: { + isNonstandard: "Past", + tier: "Illegal", + }, + trumbeak: { + isNonstandard: "Past", + tier: "Illegal", + }, + toucannon: { + tier: "OU", + }, + yungoos: { + isNonstandard: "Past", + tier: "Illegal", + }, + gumshoos: { + isNonstandard: "Past", + tier: "Illegal", + }, + gumshoostotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + grubbin: { + isNonstandard: "Past", + tier: "Illegal", + }, + charjabug: { + isNonstandard: "Past", + tier: "Illegal", + }, + vikavolt: { + isNonstandard: "Past", + tier: "Illegal", + }, + vikavolttotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + crabrawler: { + isNonstandard: "Past", + tier: "Illegal", + }, + crabominable: { + tier: "OU", + }, + crabominablemega: { + tier: "OU", + }, + oricorio: { + isNonstandard: "Past", + tier: "Illegal", + }, + oricoriopompom: { + isNonstandard: "Past", + tier: "Illegal", + }, + oricoriopau: { + isNonstandard: "Past", + tier: "Illegal", + }, + oricoriosensu: { + isNonstandard: "Past", + tier: "Illegal", + }, + cutiefly: { + isNonstandard: "Past", + tier: "Illegal", + }, + ribombee: { + isNonstandard: "Past", + tier: "Illegal", + }, + ribombeetotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + rockruff: { + isNonstandard: "Past", + tier: "Illegal", + }, + rockruffdusk: { + isNonstandard: "Past", + tier: "Illegal", + }, + lycanroc: { + tier: "OU", + }, + lycanrocmidnight: { + tier: "OU", + }, + lycanrocdusk: { + tier: "OU", + }, + wishiwashi: { + isNonstandard: "Past", + tier: "Illegal", + }, + wishiwashischool: { + isNonstandard: "Past", + }, + mareanie: { + isNonstandard: "Past", + tier: "Illegal", + }, + toxapex: { + tier: "OU", + }, + mudbray: { + isNonstandard: "Past", + tier: "Illegal", + }, + mudsdale: { + tier: "OU", + }, + dewpider: { + isNonstandard: "Past", + tier: "Illegal", + }, + araquanid: { + tier: "OU", + }, + araquanidtotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + fomantis: { + isNonstandard: "Past", + tier: "Illegal", + }, + lurantis: { + isNonstandard: "Past", + tier: "Illegal", + }, + lurantistotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + morelull: { + isNonstandard: "Past", + tier: "Illegal", + }, + shiinotic: { + isNonstandard: "Past", + tier: "Illegal", + }, + salandit: { + isNonstandard: "Past", + tier: "Illegal", + }, + salazzle: { + tier: "OU", + }, + salazzletotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + stufful: { + isNonstandard: "Past", + tier: "Illegal", + }, + bewear: { + isNonstandard: "Past", + tier: "Illegal", + }, + bounsweet: { + isNonstandard: "Past", + tier: "Illegal", + }, + steenee: { + isNonstandard: "Past", + tier: "Illegal", + }, + tsareena: { + tier: "OU", + }, + comfey: { + isNonstandard: "Past", + tier: "Illegal", + }, + oranguru: { + tier: "OU", + }, + passimian: { + tier: "OU", + }, + wimpod: { + isNonstandard: "Past", + tier: "Illegal", + }, + golisopod: { + isNonstandard: "Past", + tier: "Illegal", + }, + golisopodmega: { + isNonstandard: "Future", + tier: "Illegal", + }, + sandygast: { + isNonstandard: "Past", + tier: "Illegal", + }, + palossand: { + isNonstandard: "Past", + tier: "Illegal", + }, + pyukumuku: { + isNonstandard: "Past", + tier: "Illegal", + }, + typenull: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvally: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallybug: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallydark: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallydragon: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallyelectric: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallyfairy: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallyfighting: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallyfire: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallyflying: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallyghost: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallygrass: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallyground: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallyice: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallypoison: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallypsychic: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallyrock: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallysteel: { + isNonstandard: "Past", + tier: "Illegal", + }, + silvallywater: { + isNonstandard: "Past", + tier: "Illegal", + }, + minior: { + isNonstandard: "Past", + tier: "Illegal", + }, + komala: { + isNonstandard: "Past", + tier: "Illegal", + }, + turtonator: { + isNonstandard: "Past", + tier: "Illegal", + }, + togedemaru: { + isNonstandard: "Past", + tier: "Illegal", + }, + togedemarutotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + mimikyu: { + tier: "OU", + }, + mimikyutotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + mimikyubustedtotem: { + isNonstandard: "Past", + tier: "Illegal", + }, + bruxish: { + isNonstandard: "Past", + tier: "Illegal", + }, + drampa: { + tier: "OU", + }, + drampamega: { + tier: "OU", + }, + dhelmise: { + isNonstandard: "Past", + tier: "Illegal", + }, + jangmoo: { + isNonstandard: "Past", + tier: "Illegal", + }, + hakamoo: { + isNonstandard: "Past", + tier: "Illegal", + }, + kommoo: { + tier: "OU", + }, + kommoototem: { + isNonstandard: "Past", + tier: "Illegal", + }, + tapukoko: { + isNonstandard: "Past", + tier: "Illegal", + }, + tapulele: { + isNonstandard: "Past", + tier: "Illegal", + }, + tapubulu: { + isNonstandard: "Past", + tier: "Illegal", + }, + tapufini: { + isNonstandard: "Past", + tier: "Illegal", + }, + cosmog: { + isNonstandard: "Past", + tier: "Illegal", + }, + cosmoem: { + isNonstandard: "Past", + tier: "Illegal", + }, + solgaleo: { + isNonstandard: "Past", + tier: "Illegal", + }, + lunala: { + isNonstandard: "Past", + tier: "Illegal", + }, + nihilego: { + isNonstandard: "Past", + tier: "Illegal", + }, + buzzwole: { + isNonstandard: "Past", + tier: "Illegal", + }, + pheromosa: { + isNonstandard: "Past", + tier: "Illegal", + }, + xurkitree: { + isNonstandard: "Past", + tier: "Illegal", + }, + celesteela: { + isNonstandard: "Past", + tier: "Illegal", + }, + kartana: { + isNonstandard: "Past", + tier: "Illegal", + }, + guzzlord: { + isNonstandard: "Past", + tier: "Illegal", + }, + necrozma: { + isNonstandard: "Past", + tier: "Illegal", + }, + necrozmaduskmane: { + isNonstandard: "Past", + tier: "Illegal", + }, + necrozmadawnwings: { + isNonstandard: "Past", + tier: "Illegal", + }, + necrozmaultra: { + isNonstandard: "Past", + tier: "Illegal", + }, + magearna: { + isNonstandard: "Past", + tier: "Illegal", + }, + magearnaoriginal: { + isNonstandard: "Past", + }, + magearnamega: { + isNonstandard: "Future", + }, + magearnaoriginalmega: { + isNonstandard: "Future", + }, + marshadow: { + isNonstandard: "Past", + tier: "Illegal", + }, + poipole: { + isNonstandard: "Past", + tier: "Illegal", + }, + naganadel: { + isNonstandard: "Past", + tier: "Illegal", + }, + stakataka: { + isNonstandard: "Past", + tier: "Illegal", + }, + blacephalon: { + isNonstandard: "Past", + tier: "Illegal", + }, + zeraora: { + isNonstandard: "Past", + tier: "Illegal", + }, + zeraoramega: { + isNonstandard: "Future", + tier: "Illegal", + }, + meltan: { + isNonstandard: "Past", + tier: "Illegal", + }, + melmetal: { + isNonstandard: "Past", + tier: "Illegal", + }, + melmetalgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + grookey: { + isNonstandard: "Past", + tier: "Illegal", + }, + thwackey: { + isNonstandard: "Past", + tier: "Illegal", + }, + rillaboom: { + isNonstandard: "Past", + tier: "Illegal", + }, + rillaboomgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + scorbunny: { + isNonstandard: "Past", + tier: "Illegal", + }, + raboot: { + isNonstandard: "Past", + tier: "Illegal", + }, + cinderace: { + isNonstandard: "Past", + tier: "Illegal", + }, + cinderacegmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + sobble: { + isNonstandard: "Past", + tier: "Illegal", + }, + drizzile: { + isNonstandard: "Past", + tier: "Illegal", + }, + inteleon: { + isNonstandard: "Past", + tier: "Illegal", + }, + inteleongmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + skwovet: { + isNonstandard: "Past", + tier: "Illegal", + }, + greedent: { + isNonstandard: "Past", + tier: "Illegal", + }, + rookidee: { + isNonstandard: "Past", + tier: "Illegal", + }, + corvisquire: { + isNonstandard: "Past", + tier: "Illegal", + }, + corviknight: { + tier: "OU", + }, + corviknightgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + blipbug: { + isNonstandard: "Past", + tier: "Illegal", + }, + dottler: { + isNonstandard: "Past", + tier: "Illegal", + }, + orbeetle: { + isNonstandard: "Past", + tier: "Illegal", + }, + orbeetlegmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + nickit: { + isNonstandard: "Past", + tier: "Illegal", + }, + thievul: { + isNonstandard: "Past", + tier: "Illegal", + }, + gossifleur: { + isNonstandard: "Past", + tier: "Illegal", + }, + eldegoss: { + isNonstandard: "Past", + tier: "Illegal", + }, + wooloo: { + isNonstandard: "Past", + tier: "Illegal", + }, + dubwool: { + isNonstandard: "Past", + tier: "Illegal", + }, + chewtle: { + isNonstandard: "Past", + tier: "Illegal", + }, + drednaw: { + isNonstandard: "Past", + tier: "Illegal", + }, + drednawgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + yamper: { + isNonstandard: "Past", + tier: "Illegal", + }, + boltund: { + isNonstandard: "Past", + tier: "Illegal", + }, + rolycoly: { + isNonstandard: "Past", + tier: "Illegal", + }, + carkol: { + isNonstandard: "Past", + tier: "Illegal", + }, + coalossal: { + isNonstandard: "Past", + tier: "Illegal", + }, + coalossalgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + applin: { + isNonstandard: "Past", + tier: "Illegal", + }, + flapple: { + tier: "OU", + }, + flapplegmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + appletun: { + tier: "OU", + }, + appletungmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + dipplin: { + isNonstandard: "Past", + tier: "Illegal", + }, + silicobra: { + isNonstandard: "Past", + tier: "Illegal", + }, + sandaconda: { + tier: "OU", + }, + sandacondagmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + cramorant: { + isNonstandard: "Past", + tier: "Illegal", + }, + arrokuda: { + isNonstandard: "Past", + tier: "Illegal", + }, + barraskewda: { + isNonstandard: "Past", + tier: "Illegal", + }, + toxel: { + isNonstandard: "Past", + tier: "Illegal", + }, + toxtricity: { + isNonstandard: "Past", + tier: "Illegal", + }, + toxtricitylowkey: { + isNonstandard: "Past", + }, + toxtricitygmax: { + isNonstandard: "Past", + }, + toxtricitylowkeygmax: { + isNonstandard: "Past", + }, + sizzlipede: { + isNonstandard: "Past", + tier: "Illegal", + }, + centiskorch: { + isNonstandard: "Past", + tier: "Illegal", + }, + centiskorchgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + clobbopus: { + isNonstandard: "Past", + tier: "Illegal", + }, + grapploct: { + isNonstandard: "Past", + tier: "Illegal", + }, + sinistea: { + isNonstandard: "Past", + tier: "Illegal", + }, + sinisteaantique: { + isNonstandard: "Past", + }, + polteageist: { + tier: "OU", + }, + hatenna: { + isNonstandard: "Past", + tier: "Illegal", + }, + hattrem: { + isNonstandard: "Past", + tier: "Illegal", + }, + hatterene: { + tier: "OU", + }, + hatterenegmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + impidimp: { + isNonstandard: "Past", + tier: "Illegal", + }, + morgrem: { + isNonstandard: "Past", + tier: "Illegal", + }, + grimmsnarl: { + isNonstandard: "Past", + tier: "Illegal", + }, + grimmsnarlgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + milcery: { + isNonstandard: "Past", + tier: "Illegal", + }, + alcremie: { + tier: "OU", + }, + alcremiegmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + falinks: { + isNonstandard: "Past", + tier: "Illegal", + }, + falinksmega: { + isNonstandard: "Future", + tier: "Illegal", + }, + pincurchin: { + isNonstandard: "Past", + tier: "Illegal", + }, + snom: { + isNonstandard: "Past", + tier: "Illegal", + }, + frosmoth: { + isNonstandard: "Past", + tier: "Illegal", + }, + stonjourner: { + isNonstandard: "Past", + tier: "Illegal", + }, + eiscue: { + isNonstandard: "Past", + tier: "Illegal", + }, + indeedee: { + isNonstandard: "Past", + tier: "Illegal", + }, + indeedeef: { + isNonstandard: "Past", + tier: "Illegal", + }, + morpeko: { + tier: "OU", + }, + cufant: { + isNonstandard: "Past", + tier: "Illegal", + }, + copperajah: { + isNonstandard: "Past", + tier: "Illegal", + }, + copperajahgmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + dracozolt: { + isNonstandard: "Past", + tier: "Illegal", + }, + arctozolt: { + isNonstandard: "Past", + tier: "Illegal", + }, + dracovish: { + isNonstandard: "Past", + tier: "Illegal", + }, + arctovish: { + isNonstandard: "Past", + tier: "Illegal", + }, + duraludon: { + isNonstandard: "Past", + tier: "Illegal", + }, + duraludongmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + dreepy: { + isNonstandard: "Past", + tier: "Illegal", + }, + drakloak: { + isNonstandard: "Past", + tier: "Illegal", + }, + dragapult: { + tier: "OU", + }, + zacian: { + isNonstandard: "Past", + tier: "Illegal", + }, + zaciancrowned: { + isNonstandard: "Past", + tier: "Illegal", + }, + zamazenta: { + isNonstandard: "Past", + tier: "Illegal", + }, + zamazentacrowned: { + isNonstandard: "Past", + tier: "Illegal", + }, + eternatus: { + isNonstandard: "Past", + tier: "Illegal", + }, + eternatuseternamax: { + isNonstandard: "Past", + tier: "Illegal", + }, + kubfu: { + isNonstandard: "Past", + tier: "Illegal", + }, + urshifu: { + isNonstandard: "Past", + tier: "Illegal", + }, + urshifurapidstrike: { + isNonstandard: "Past", + tier: "Illegal", + }, + urshifugmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + urshifurapidstrikegmax: { + isNonstandard: "Past", + tier: "Illegal", + }, + zarude: { + isNonstandard: "Past", + tier: "Illegal", + }, + zarudedada: { + isNonstandard: "Past", + }, + regieleki: { + isNonstandard: "Past", + tier: "Illegal", + }, + regidrago: { + isNonstandard: "Past", + tier: "Illegal", + }, + glastrier: { + isNonstandard: "Past", + tier: "Illegal", + }, + spectrier: { + isNonstandard: "Past", + tier: "Illegal", + }, + calyrex: { + isNonstandard: "Past", + tier: "Illegal", + }, + calyrexice: { + isNonstandard: "Past", + tier: "Illegal", + }, + calyrexshadow: { + isNonstandard: "Past", + tier: "Illegal", + }, + enamorus: { + isNonstandard: "Past", + tier: "Illegal", + }, + enamorustherian: { + isNonstandard: "Past", + tier: "Illegal", + }, + sprigatito: { + isNonstandard: "Past", + tier: "Illegal", + }, + floragato: { + isNonstandard: "Past", + tier: "Illegal", + }, + meowscarada: { + tier: "OU", + }, + fuecoco: { + isNonstandard: "Past", + tier: "Illegal", + }, + crocalor: { + isNonstandard: "Past", + tier: "Illegal", + }, + skeledirge: { + tier: "OU", + }, + quaxly: { + isNonstandard: "Past", + tier: "Illegal", + }, + quaxwell: { + isNonstandard: "Past", + tier: "Illegal", + }, + quaquaval: { + tier: "OU", + }, + lechonk: { + isNonstandard: "Past", + tier: "Illegal", + }, + oinkologne: { + isNonstandard: "Past", + tier: "Illegal", + }, + oinkolognef: { + isNonstandard: "Past", + tier: "Illegal", + }, + tarountula: { + isNonstandard: "Past", + tier: "Illegal", + }, + spidops: { + isNonstandard: "Past", + tier: "Illegal", + }, + nymble: { + isNonstandard: "Past", + tier: "Illegal", + }, + lokix: { + isNonstandard: "Past", + tier: "Illegal", + }, + rellor: { + isNonstandard: "Past", + tier: "Illegal", + }, + rabsca: { + isNonstandard: "Past", + tier: "Illegal", + }, + greavard: { + isNonstandard: "Past", + tier: "Illegal", + }, + houndstone: { + isNonstandard: "Past", + tier: "Illegal", + }, + flittle: { + isNonstandard: "Past", + tier: "Illegal", + }, + espathra: { + tier: "OU", + }, + wiglett: { + isNonstandard: "Past", + tier: "Illegal", + }, + wugtrio: { + isNonstandard: "Past", + tier: "Illegal", + }, + dondozo: { + isNonstandard: "Past", + tier: "Illegal", + }, + veluza: { + isNonstandard: "Past", + tier: "Illegal", + }, + finizen: { + isNonstandard: "Past", + tier: "Illegal", + }, + palafin: { + tier: "Uber", + }, + smoliv: { + isNonstandard: "Past", + tier: "Illegal", + }, + dolliv: { + isNonstandard: "Past", + tier: "Illegal", + }, + arboliva: { + isNonstandard: "Past", + tier: "Illegal", + }, + capsakid: { + isNonstandard: "Past", + tier: "Illegal", + }, + scovillain: { + tier: "OU", + }, + scovillainmega: { + tier: "OU", + }, + tadbulb: { + isNonstandard: "Past", + tier: "Illegal", + }, + bellibolt: { + tier: "OU", + }, + varoom: { + isNonstandard: "Past", + tier: "Illegal", + }, + revavroom: { + isNonstandard: "Past", + tier: "Illegal", + }, + orthworm: { + tier: "OU", + }, + tandemaus: { + isNonstandard: "Past", + tier: "Illegal", + }, + maushold: { + tier: "OU", + }, + cetoddle: { + isNonstandard: "Past", + tier: "Illegal", + }, + cetitan: { + isNonstandard: "Past", + tier: "Illegal", + }, + frigibax: { + isNonstandard: "Past", + tier: "Illegal", + }, + arctibax: { + isNonstandard: "Past", + tier: "Illegal", + }, + baxcalibur: { + isNonstandard: "Past", + tier: "Illegal", + }, + baxcaliburmega: { + isNonstandard: "Future", + tier: "Illegal", + }, + tatsugiri: { + isNonstandard: "Past", + tier: "Illegal", + }, + tatsugiridroopy: { + isNonstandard: "Past", + }, + tatsugiristretchy: { + isNonstandard: "Past", + }, + tatsugiricurlymega: { + isNonstandard: "Future", + tier: "Illegal", + }, + tatsugiridroopymega: { + isNonstandard: "Future", + tier: "Illegal", + }, + tatsugiristretchymega: { + isNonstandard: "Future", + tier: "Illegal", + }, + cyclizar: { + isNonstandard: "Past", + tier: "Illegal", + }, + pawmi: { + isNonstandard: "Past", + tier: "Illegal", + }, + pawmo: { + isNonstandard: "Past", + tier: "Illegal", + }, + pawmot: { + isNonstandard: "Past", + tier: "Illegal", + }, + wattrel: { + isNonstandard: "Past", + tier: "Illegal", + }, + kilowattrel: { + isNonstandard: "Past", + tier: "Illegal", + }, + bombirdier: { + isNonstandard: "Past", + tier: "Illegal", + }, + squawkabilly: { + isNonstandard: "Past", + tier: "Illegal", + }, + squawkabillyblue: { + isNonstandard: "Past", + }, + squawkabillyyellow: { + isNonstandard: "Past", + }, + squawkabillywhite: { + isNonstandard: "Past", + }, + flamigo: { + isNonstandard: "Past", + tier: "Illegal", + }, + klawf: { + isNonstandard: "Past", + tier: "Illegal", + }, + nacli: { + isNonstandard: "Past", + tier: "Illegal", + }, + naclstack: { + isNonstandard: "Past", + tier: "Illegal", + }, + garganacl: { + tier: "OU", + }, + glimmet: { + isNonstandard: "Past", + tier: "Illegal", + }, + glimmora: { + tier: "OU", + }, + glimmoramega: { + tier: "OU", + }, + shroodle: { + isNonstandard: "Past", + tier: "Illegal", + }, + grafaiai: { + isNonstandard: "Past", + tier: "Illegal", + }, + fidough: { + isNonstandard: "Past", + tier: "Illegal", + }, + dachsbun: { + isNonstandard: "Past", + tier: "Illegal", + }, + maschiff: { + isNonstandard: "Past", + tier: "Illegal", + }, + mabosstiff: { + isNonstandard: "Past", + tier: "Illegal", + }, + bramblin: { + isNonstandard: "Past", + tier: "Illegal", + }, + brambleghast: { + isNonstandard: "Past", + tier: "Illegal", + }, + gimmighoul: { + isNonstandard: "Past", + tier: "Illegal", + }, + gimmighoulroaming: { + isNonstandard: "Past", + tier: "Illegal", + }, + gholdengo: { + isNonstandard: "Past", + tier: "Illegal", + }, + greattusk: { + isNonstandard: "Past", + tier: "Illegal", + }, + brutebonnet: { + isNonstandard: "Past", + tier: "Illegal", + }, + sandyshocks: { + isNonstandard: "Past", + tier: "Illegal", + }, + screamtail: { + isNonstandard: "Past", + tier: "Illegal", + }, + fluttermane: { + isNonstandard: "Past", + tier: "Illegal", + }, + slitherwing: { + isNonstandard: "Past", + tier: "Illegal", + }, + roaringmoon: { + isNonstandard: "Past", + tier: "Illegal", + }, + irontreads: { + isNonstandard: "Past", + tier: "Illegal", + }, + ironmoth: { + isNonstandard: "Past", + tier: "Illegal", + }, + ironhands: { + isNonstandard: "Past", + tier: "Illegal", + }, + ironjugulis: { + isNonstandard: "Past", + tier: "Illegal", + }, + ironthorns: { + isNonstandard: "Past", + tier: "Illegal", + }, + ironbundle: { + isNonstandard: "Past", + tier: "Illegal", + }, + ironvaliant: { + isNonstandard: "Past", + tier: "Illegal", + }, + tinglu: { + isNonstandard: "Past", + tier: "Illegal", + }, + chienpao: { + isNonstandard: "Past", + tier: "Illegal", + }, + wochien: { + isNonstandard: "Past", + tier: "Illegal", + }, + chiyu: { + isNonstandard: "Past", + tier: "Illegal", + }, + koraidon: { + isNonstandard: "Past", + tier: "Illegal", + }, + miraidon: { + isNonstandard: "Past", + tier: "Illegal", + }, + tinkatink: { + isNonstandard: "Past", + tier: "Illegal", + }, + tinkatuff: { + isNonstandard: "Past", + tier: "Illegal", + }, + tinkaton: { + tier: "OU", + }, + charcadet: { + isNonstandard: "Past", + tier: "Illegal", + }, + armarouge: { + tier: "OU", + }, + ceruledge: { + tier: "OU", + }, + toedscool: { + isNonstandard: "Past", + tier: "Illegal", + }, + toedscruel: { + isNonstandard: "Past", + tier: "Illegal", + }, + kingambit: { + tier: "OU", + }, + clodsire: { + isNonstandard: "Past", + tier: "Illegal", + }, + annihilape: { + isNonstandard: "Past", + tier: "Illegal", + }, + walkingwake: { + isNonstandard: "Past", + tier: "Illegal", + }, + ironleaves: { + isNonstandard: "Past", + tier: "Illegal", + }, + poltchageist: { + isNonstandard: "Past", + tier: "Illegal", + }, + poltchageistartisan: { + isNonstandard: "Past", + }, + sinistcha: { + tier: "OU", + }, + okidogi: { + isNonstandard: "Past", + tier: "Illegal", + }, + munkidori: { + isNonstandard: "Past", + tier: "Illegal", + }, + fezandipiti: { + isNonstandard: "Past", + tier: "Illegal", + }, + ogerpon: { + isNonstandard: "Past", + tier: "Illegal", + }, + ogerponwellspring: { + isNonstandard: "Past", + tier: "Illegal", + }, + ogerponhearthflame: { + isNonstandard: "Past", + tier: "Illegal", + }, + ogerponcornerstone: { + isNonstandard: "Past", + tier: "Illegal", + }, + archaludon: { + tier: "OU", + }, + hydrapple: { + tier: "OU", + }, + gougingfire: { + isNonstandard: "Past", + tier: "Illegal", + }, + ragingbolt: { + isNonstandard: "Past", + tier: "Illegal", + }, + ironboulder: { + isNonstandard: "Past", + tier: "Illegal", + }, + ironcrown: { + isNonstandard: "Past", + tier: "Illegal", + }, + terapagos: { + isNonstandard: "Past", + tier: "Illegal", + }, + terapagosstellar: { + isNonstandard: "Past", + tier: "Illegal", + }, + pecharunt: { + isNonstandard: "Past", + tier: "Illegal", + }, +}; diff --git a/data/mods/champions/items.ts b/data/mods/champions/items.ts new file mode 100644 index 0000000000..a18c7f004c --- /dev/null +++ b/data/mods/champions/items.ts @@ -0,0 +1,1053 @@ +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { + abilityshield: { + inherit: true, + isNonstandard: "Past", + }, + abomasite: { + inherit: true, + isNonstandard: null, + }, + absolite: { + inherit: true, + isNonstandard: null, + }, + absorbbulb: { + inherit: true, + isNonstandard: "Past", + }, + adamantcrystal: { + inherit: true, + isNonstandard: "Past", + }, + adamantorb: { + inherit: true, + isNonstandard: "Past", + }, + adrenalineorb: { + inherit: true, + isNonstandard: "Past", + }, + aerodactylite: { + inherit: true, + isNonstandard: null, + }, + aggronite: { + inherit: true, + isNonstandard: null, + }, + aguavberry: { + inherit: true, + isNonstandard: "Past", + }, + airballoon: { + inherit: true, + isNonstandard: "Past", + }, + alakazite: { + inherit: true, + isNonstandard: null, + }, + altarianite: { + inherit: true, + isNonstandard: null, + }, + ampharosite: { + inherit: true, + isNonstandard: null, + }, + apicotberry: { + inherit: true, + isNonstandard: "Past", + }, + assaultvest: { + inherit: true, + isNonstandard: "Past", + }, + audinite: { + inherit: true, + isNonstandard: null, + }, + auspiciousarmor: { + inherit: true, + isNonstandard: "Past", + }, + banettite: { + inherit: true, + isNonstandard: null, + }, + beastball: { + inherit: true, + isNonstandard: "Past", + }, + beedrillite: { + inherit: true, + isNonstandard: null, + }, + berrysweet: { + inherit: true, + isNonstandard: "Past", + }, + bignugget: { + inherit: true, + isNonstandard: "Past", + }, + bigroot: { + inherit: true, + isNonstandard: "Past", + }, + bindingband: { + inherit: true, + isNonstandard: "Past", + }, + blacksludge: { + inherit: true, + isNonstandard: "Past", + }, + blastoisinite: { + inherit: true, + isNonstandard: null, + }, + blunderpolicy: { + inherit: true, + isNonstandard: "Past", + }, + boosterenergy: { + inherit: true, + isNonstandard: "Past", + }, + bottlecap: { + inherit: true, + isNonstandard: "Past", + }, + cameruptite: { + inherit: true, + isNonstandard: null, + }, + cellbattery: { + inherit: true, + isNonstandard: "Past", + }, + chandelurite: { + inherit: true, + isNonstandard: null, + }, + charizarditex: { + inherit: true, + isNonstandard: null, + }, + charizarditey: { + inherit: true, + isNonstandard: null, + }, + chesnaughtite: { + inherit: true, + isNonstandard: null, + }, + chimechite: { + inherit: true, + isNonstandard: null, + }, + chippedpot: { + inherit: true, + isNonstandard: "Past", + }, + choiceband: { + inherit: true, + isNonstandard: "Past", + }, + choicespecs: { + inherit: true, + isNonstandard: "Past", + }, + clearamulet: { + inherit: true, + isNonstandard: "Past", + }, + clefablite: { + inherit: true, + isNonstandard: null, + }, + cloversweet: { + inherit: true, + isNonstandard: "Past", + }, + cornerstonemask: { + inherit: true, + isNonstandard: "Past", + }, + covertcloak: { + inherit: true, + isNonstandard: "Past", + }, + crabominite: { + inherit: true, + isNonstandard: null, + }, + crackedpot: { + inherit: true, + isNonstandard: "Past", + }, + custapberry: { + inherit: true, + isNonstandard: "Past", + }, + damprock: { + inherit: true, + isNonstandard: "Past", + }, + darkranite: { + inherit: true, + isNonstandard: "Past", + }, + dawnstone: { + inherit: true, + isNonstandard: "Past", + }, + delphoxite: { + inherit: true, + isNonstandard: null, + }, + destinyknot: { + inherit: true, + isNonstandard: "Past", + }, + diveball: { + inherit: true, + isNonstandard: "Past", + }, + dracoplate: { + inherit: true, + isNonstandard: "Past", + }, + dragalgite: { + inherit: true, + isNonstandard: "Past", + }, + dragoninite: { + inherit: true, + isNonstandard: null, + }, + dragonscale: { + inherit: true, + isNonstandard: "Past", + }, + drampanite: { + inherit: true, + isNonstandard: null, + }, + dreadplate: { + inherit: true, + isNonstandard: "Past", + }, + dreamball: { + inherit: true, + isNonstandard: "Past", + }, + dubiousdisc: { + inherit: true, + isNonstandard: "Past", + }, + duskball: { + inherit: true, + isNonstandard: "Past", + }, + duskstone: { + inherit: true, + isNonstandard: "Past", + }, + earthplate: { + inherit: true, + isNonstandard: "Past", + }, + eelektrossite: { + inherit: true, + isNonstandard: "Past", + }, + ejectbutton: { + inherit: true, + isNonstandard: "Past", + }, + ejectpack: { + inherit: true, + isNonstandard: "Past", + }, + electirizer: { + inherit: true, + isNonstandard: "Past", + }, + electricseed: { + inherit: true, + isNonstandard: "Past", + }, + emboarite: { + inherit: true, + isNonstandard: null, + }, + enigmaberry: { + inherit: true, + isNonstandard: "Past", + }, + eviolite: { + inherit: true, + isNonstandard: "Past", + }, + excadrite: { + inherit: true, + isNonstandard: null, + }, + expertbelt: { + inherit: true, + isNonstandard: "Past", + }, + falinksite: { + inherit: true, + isNonstandard: "Past", + }, + fastball: { + inherit: true, + isNonstandard: "Past", + }, + feraligite: { + inherit: true, + isNonstandard: null, + }, + figyberry: { + inherit: true, + isNonstandard: "Past", + }, + firestone: { + inherit: true, + isNonstandard: "Past", + }, + fistplate: { + inherit: true, + isNonstandard: "Past", + }, + flameorb: { + inherit: true, + isNonstandard: "Past", + }, + flameplate: { + inherit: true, + isNonstandard: "Past", + }, + floatstone: { + inherit: true, + isNonstandard: "Past", + }, + floettite: { + inherit: true, + isNonstandard: null, + }, + flowersweet: { + inherit: true, + isNonstandard: "Past", + }, + friendball: { + inherit: true, + isNonstandard: "Past", + }, + froslassite: { + inherit: true, + isNonstandard: null, + }, + galaricacuff: { + inherit: true, + isNonstandard: "Past", + }, + galaricawreath: { + inherit: true, + isNonstandard: "Past", + }, + galladite: { + inherit: true, + isNonstandard: null, + }, + ganlonberry: { + inherit: true, + isNonstandard: "Past", + }, + garchompite: { + inherit: true, + isNonstandard: null, + }, + gardevoirite: { + inherit: true, + isNonstandard: null, + }, + gengarite: { + inherit: true, + isNonstandard: null, + }, + glalitite: { + inherit: true, + isNonstandard: null, + }, + glimmoranite: { + inherit: true, + isNonstandard: null, + }, + goldbottlecap: { + inherit: true, + isNonstandard: "Past", + }, + golisopite: { + inherit: true, + isNonstandard: "Past", + }, + golurkite: { + inherit: true, + isNonstandard: null, + }, + grassyseed: { + inherit: true, + isNonstandard: "Past", + }, + greatball: { + inherit: true, + isNonstandard: "Past", + }, + greninjite: { + inherit: true, + isNonstandard: null, + }, + grepaberry: { + inherit: true, + isNonstandard: "Past", + }, + gripclaw: { + inherit: true, + isNonstandard: "Past", + }, + griseouscore: { + inherit: true, + isNonstandard: "Past", + }, + griseousorb: { + inherit: true, + isNonstandard: "Past", + }, + gyaradosite: { + inherit: true, + isNonstandard: null, + }, + hawluchanite: { + inherit: true, + isNonstandard: null, + }, + healball: { + inherit: true, + isNonstandard: "Past", + }, + hearthflamemask: { + inherit: true, + isNonstandard: "Past", + }, + heatranite: { + inherit: true, + isNonstandard: "Past", + }, + heatrock: { + inherit: true, + isNonstandard: "Past", + }, + heavyball: { + inherit: true, + isNonstandard: "Past", + }, + heavydutyboots: { + inherit: true, + isNonstandard: "Past", + }, + heracronite: { + inherit: true, + isNonstandard: null, + }, + hondewberry: { + inherit: true, + isNonstandard: "Past", + }, + houndoominite: { + inherit: true, + isNonstandard: null, + }, + iapapaberry: { + inherit: true, + isNonstandard: "Past", + }, + icestone: { + inherit: true, + isNonstandard: "Past", + }, + icicleplate: { + inherit: true, + isNonstandard: "Past", + }, + icyrock: { + inherit: true, + isNonstandard: "Past", + }, + insectplate: { + inherit: true, + isNonstandard: "Past", + }, + ironball: { + inherit: true, + isNonstandard: "Past", + }, + ironplate: { + inherit: true, + isNonstandard: "Past", + }, + jabocaberry: { + inherit: true, + isNonstandard: "Past", + }, + kangaskhanite: { + inherit: true, + isNonstandard: null, + }, + keeberry: { + inherit: true, + isNonstandard: "Past", + }, + kelpsyberry: { + inherit: true, + isNonstandard: "Past", + }, + laggingtail: { + inherit: true, + isNonstandard: "Past", + }, + lansatberry: { + inherit: true, + isNonstandard: "Past", + }, + leafstone: { + inherit: true, + isNonstandard: "Past", + }, + levelball: { + inherit: true, + isNonstandard: "Past", + }, + liechiberry: { + inherit: true, + isNonstandard: "Past", + }, + lifeorb: { + inherit: true, + isNonstandard: "Past", + }, + lightclay: { + inherit: true, + isNonstandard: "Past", + }, + loadeddice: { + inherit: true, + isNonstandard: "Past", + }, + lopunnite: { + inherit: true, + isNonstandard: null, + }, + loveball: { + inherit: true, + isNonstandard: "Past", + }, + lovesweet: { + inherit: true, + isNonstandard: "Past", + }, + lucarionite: { + inherit: true, + isNonstandard: null, + }, + luminousmoss: { + inherit: true, + isNonstandard: "Past", + }, + lureball: { + inherit: true, + isNonstandard: "Past", + }, + lustrousglobe: { + inherit: true, + isNonstandard: "Past", + }, + lustrousorb: { + inherit: true, + isNonstandard: "Past", + }, + luxuryball: { + inherit: true, + isNonstandard: "Past", + }, + magmarizer: { + inherit: true, + isNonstandard: "Past", + }, + magoberry: { + inherit: true, + isNonstandard: "Past", + }, + maliciousarmor: { + inherit: true, + isNonstandard: "Past", + }, + manectite: { + inherit: true, + isNonstandard: null, + }, + marangaberry: { + inherit: true, + isNonstandard: "Past", + }, + masterball: { + inherit: true, + isNonstandard: "Past", + }, + masterpieceteacup: { + inherit: true, + isNonstandard: "Past", + }, + meadowplate: { + inherit: true, + isNonstandard: "Past", + }, + medichamite: { + inherit: true, + isNonstandard: null, + }, + meganiumite: { + inherit: true, + isNonstandard: null, + }, + meowsticite: { + inherit: true, + isNonstandard: null, + }, + metalalloy: { + inherit: true, + isNonstandard: "Past", + }, + metronome: { + inherit: true, + isNonstandard: "Past", + }, + micleberry: { + inherit: true, + isNonstandard: "Past", + }, + mindplate: { + inherit: true, + isNonstandard: "Past", + }, + mirrorherb: { + inherit: true, + isNonstandard: "Past", + }, + mistyseed: { + inherit: true, + isNonstandard: "Past", + }, + moonball: { + inherit: true, + isNonstandard: "Past", + }, + moonstone: { + inherit: true, + isNonstandard: "Past", + }, + muscleband: { + inherit: true, + isNonstandard: "Past", + }, + nestball: { + inherit: true, + isNonstandard: "Past", + }, + netball: { + inherit: true, + isNonstandard: "Past", + }, + normalgem: { + inherit: true, + isNonstandard: "Past", + }, + ovalstone: { + inherit: true, + isNonstandard: "Past", + }, + parkball: { + inherit: true, + isNonstandard: "Past", + }, + petayaberry: { + inherit: true, + isNonstandard: "Past", + }, + pidgeotite: { + inherit: true, + isNonstandard: null, + }, + pinsirite: { + inherit: true, + isNonstandard: null, + }, + pixieplate: { + inherit: true, + isNonstandard: "Past", + }, + pokeball: { + inherit: true, + isNonstandard: "Past", + }, + pomegberry: { + inherit: true, + isNonstandard: "Past", + }, + poweranklet: { + inherit: true, + isNonstandard: "Past", + }, + powerband: { + inherit: true, + isNonstandard: "Past", + }, + powerbelt: { + inherit: true, + isNonstandard: "Past", + }, + powerbracer: { + inherit: true, + isNonstandard: "Past", + }, + powerherb: { + inherit: true, + isNonstandard: "Past", + }, + powerlens: { + inherit: true, + isNonstandard: "Past", + }, + powerweight: { + inherit: true, + isNonstandard: "Past", + }, + premierball: { + inherit: true, + isNonstandard: "Past", + }, + prettyfeather: { + inherit: true, + isNonstandard: "Past", + }, + prismscale: { + inherit: true, + isNonstandard: "Past", + }, + protectivepads: { + inherit: true, + isNonstandard: "Past", + }, + protector: { + inherit: true, + isNonstandard: "Past", + }, + psychicseed: { + inherit: true, + isNonstandard: "Past", + }, + punchingglove: { + inherit: true, + isNonstandard: "Past", + }, + qualotberry: { + inherit: true, + isNonstandard: "Past", + }, + quickball: { + inherit: true, + isNonstandard: "Past", + }, + rarebone: { + inherit: true, + isNonstandard: "Past", + }, + razorclaw: { + inherit: true, + isNonstandard: "Past", + }, + razorfang: { + inherit: true, + isNonstandard: "Past", + }, + reapercloth: { + inherit: true, + isNonstandard: "Past", + }, + redcard: { + inherit: true, + isNonstandard: "Past", + }, + repeatball: { + inherit: true, + isNonstandard: "Past", + }, + ribbonsweet: { + inherit: true, + isNonstandard: "Past", + }, + ringtarget: { + inherit: true, + isNonstandard: "Past", + }, + rockyhelmet: { + inherit: true, + isNonstandard: "Past", + }, + roomservice: { + inherit: true, + isNonstandard: "Past", + }, + rowapberry: { + inherit: true, + isNonstandard: "Past", + }, + rustedshield: { + inherit: true, + isNonstandard: "Past", + }, + rustedsword: { + inherit: true, + isNonstandard: "Past", + }, + sablenite: { + inherit: true, + isNonstandard: null, + }, + safariball: { + inherit: true, + isNonstandard: "Past", + }, + safetygoggles: { + inherit: true, + isNonstandard: "Past", + }, + salacberry: { + inherit: true, + isNonstandard: "Past", + }, + scizorite: { + inherit: true, + isNonstandard: null, + }, + scovillainite: { + inherit: true, + isNonstandard: null, + }, + sharpedonite: { + inherit: true, + isNonstandard: null, + }, + shedshell: { + inherit: true, + isNonstandard: "Past", + }, + shinystone: { + inherit: true, + isNonstandard: "Past", + }, + skarmorite: { + inherit: true, + isNonstandard: null, + }, + skyplate: { + inherit: true, + isNonstandard: "Past", + }, + slowbronite: { + inherit: true, + isNonstandard: null, + }, + smoothrock: { + inherit: true, + isNonstandard: "Past", + }, + snowball: { + inherit: true, + isNonstandard: "Past", + }, + souldew: { + inherit: true, + isNonstandard: "Past", + }, + spelltag: { + inherit: true, + isNonstandard: null, + }, + splashplate: { + inherit: true, + isNonstandard: "Past", + }, + spookyplate: { + inherit: true, + isNonstandard: "Past", + }, + sportball: { + inherit: true, + isNonstandard: "Past", + }, + starfberry: { + inherit: true, + isNonstandard: "Past", + }, + starminite: { + inherit: true, + isNonstandard: null, + }, + starsweet: { + inherit: true, + isNonstandard: "Past", + }, + steelixite: { + inherit: true, + isNonstandard: null, + }, + stickybarb: { + inherit: true, + isNonstandard: "Past", + }, + stoneplate: { + inherit: true, + isNonstandard: "Past", + }, + strangeball: { + inherit: true, + isNonstandard: "Past", + }, + strawberrysweet: { + inherit: true, + isNonstandard: "Past", + }, + sunstone: { + inherit: true, + isNonstandard: "Past", + }, + sweetapple: { + inherit: true, + isNonstandard: "Past", + }, + syrupyapple: { + inherit: true, + isNonstandard: "Past", + }, + tamatoberry: { + inherit: true, + isNonstandard: "Past", + }, + tartapple: { + inherit: true, + isNonstandard: "Past", + }, + terrainextender: { + inherit: true, + isNonstandard: "Past", + }, + throatspray: { + inherit: true, + isNonstandard: "Past", + }, + thunderstone: { + inherit: true, + isNonstandard: "Past", + }, + timerball: { + inherit: true, + isNonstandard: "Past", + }, + toxicorb: { + inherit: true, + isNonstandard: "Past", + }, + toxicplate: { + inherit: true, + isNonstandard: "Past", + }, + tyranitarite: { + inherit: true, + isNonstandard: null, + }, + ultraball: { + inherit: true, + isNonstandard: "Past", + }, + unremarkableteacup: { + inherit: true, + isNonstandard: "Past", + }, + upgrade: { + inherit: true, + isNonstandard: "Past", + }, + utilityumbrella: { + inherit: true, + isNonstandard: "Past", + }, + venusaurite: { + inherit: true, + isNonstandard: null, + }, + victreebelite: { + inherit: true, + isNonstandard: null, + }, + waterstone: { + inherit: true, + isNonstandard: "Past", + }, + weaknesspolicy: { + inherit: true, + isNonstandard: "Past", + }, + wellspringmask: { + inherit: true, + isNonstandard: "Past", + }, + whiteherb: { + inherit: true, + onAnyAfterMove() { + // Desync: proceed from Parting Shot's point of view + this.queue.insertChoice({ + choice: 'event', + event: 'WhiteHerb', + order: 99, // before switches + pokemon: this.effectState.target, + }); + }, + onWhiteHerb(pokemon) { + ((this.effect as any).onStart as (p: Pokemon) => void).call(this, this.effectState.target); + }, + }, + widelens: { + inherit: true, + isNonstandard: "Past", + }, + wikiberry: { + inherit: true, + isNonstandard: "Past", + }, + wiseglasses: { + inherit: true, + isNonstandard: "Past", + }, + zapplate: { + inherit: true, + isNonstandard: "Past", + }, + zoomlens: { + inherit: true, + isNonstandard: "Past", + }, +}; diff --git a/data/mods/champions/learnsets.ts b/data/mods/champions/learnsets.ts new file mode 100644 index 0000000000..622a4184da --- /dev/null +++ b/data/mods/champions/learnsets.ts @@ -0,0 +1,13451 @@ +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { + venusaur: { + learnset: { + acidspray: ["9M"], + amnesia: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + bulletseed: ["9M"], + charm: ["9M"], + curse: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + frenzyplant: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + ingrain: ["9M"], + knockoff: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + lightscreen: ["9M"], + outrage: ["9M"], + petalblizzard: ["9M"], + petaldance: ["9M"], + poisonjab: ["9M"], + poisonpowder: ["9M"], + powerwhip: ["9M"], + protect: ["9M"], + roar: ["9M"], + rest: ["9M"], + round: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + sleeppowder: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + sweetscent: ["9M"], + swordsdance: ["9M"], + synthesis: ["9M"], + terrainpulse: ["9M"], + toxic: ["9M"], + trailblaze: ["9M"], + venoshock: ["9M"], + weatherball: ["9M"], + worryseed: ["9M"], + }, + }, + charizard: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + ancientpower: ["9M"], + beatup: ["9M"], + bellydrum: ["9M"], + bite: ["9M"], + blastburn: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + counter: ["9M"], + crunch: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dragontail: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firepunch: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + fling: ["9M"], + fly: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + heatcrash: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + inferno: ["9M"], + irontail: ["9M"], + megakick: ["9M"], + outrage: ["9M"], + overheat: ["9M"], + protect: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + roost: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + temperflare: ["9M"], + thunderpunch: ["9M"], + weatherball: ["9M"], + willowisp: ["9M"], + }, + }, + blastoise: { + learnset: { + aquajet: ["9M"], + aquaring: ["9M"], + aquatail: ["9M"], + aurasphere: ["9M"], + avalanche: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bulldoze: ["9M"], + brickbreak: ["9M"], + bodyslam: ["9M"], + chillingwater: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + dragonpulse: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + flail: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + flipturn: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hydrocannon: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icespinner: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lifedew: ["9M"], + liquidation: ["9M"], + megakick: ["9M"], + mirrorcoat: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + outrage: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rapidspin: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + shellsmash: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + substitute: ["9M"], + surf: ["9M"], + terrainpulse: ["9M"], + waterpulse: ["9M"], + waterspout: ["9M"], + waterfall: ["9M"], + wavecrash: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + beedrill: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + assurance: ["9M"], + attract: ["9M"], + batonpass: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bugbite: ["9M"], + bugbuzz: ["9M"], + crosspoison: ["9M"], + doublehit: ["9M"], + doubleedge: ["9M"], + drillrun: ["9M"], + dualwingbeat: ["9M"], + electroweb: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fellstinger: ["9M"], + focusenergy: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + knockoff: ["9M"], + lunge: ["9M"], + payback: ["9M"], + pinmissile: ["9M"], + poisonjab: ["9M"], + pollenpuff: ["9M"], + pounce: ["9M"], + protect: ["9M"], + rest: ["9M"], + round: ["9M"], + screech: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stringshot: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + uturn: ["9M"], + venoshock: ["9M"], + xscissor: ["9M"], + }, + }, + pidgeot: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + airslash: ["9M"], + attract: ["9M"], + bravebird: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + fly: ["9M"], + gigaimpact: ["9M"], + heatwave: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + quickattack: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roost: ["9M"], + round: ["9M"], + skyattack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + tailwind: ["9M"], + thief: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + whirlwind: ["9M"], + }, + }, + arbok: { + learnset: { + acidspray: ["9M"], + beatup: ["9M"], + belch: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + coil: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragontail: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + gastroacid: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + glare: ["9M"], + gunkshot: ["9M"], + haze: ["9M"], + hyperbeam: ["9M"], + icefang: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + leechlife: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + poisonfang: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + seedbomb: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snarl: ["9M"], + snore: ["9M"], + spitup: ["9M"], + spite: ["9M"], + stockpile: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swallow: ["9M"], + switcheroo: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderfang: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + trailblaze: ["9M"], + venoshock: ["9M"], + wrap: ["9M"], + }, + }, + pikachu: { + learnset: { + agility: ["9M"], + alluringvoice: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + dig: ["9M"], + discharge: ["9M"], + doubleteam: ["9M"], + drainingkiss: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + feint: ["9M"], + flail: ["9M"], + fling: ["9M"], + focuspunch: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lightscreen: ["9M"], + megakick: ["9M"], + nastyplot: ["9M"], + nuzzle: ["9M"], + playrough: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + risingvoltage: ["9M"], + round: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + substitute: ["9M"], + surf: ["9M"], + sweetkiss: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + upperhand: ["9M"], + voltswitch: ["9M"], + volttackle: ["9M"], + wildcharge: ["9M"], + wish: ["9M"], + zapcannon: ["9M"], + }, + }, + raichu: { + learnset: { + agility: ["9M"], + alluringvoice: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + dazzlinggleam: ["9M"], + dig: ["9M"], + discharge: ["9M"], + doubleteam: ["9M"], + drainpunch: ["9M"], + drainingkiss: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + feint: ["9M"], + flail: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lightscreen: ["9M"], + megakick: ["9M"], + nastyplot: ["9M"], + nuzzle: ["9M"], + playrough: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + risingvoltage: ["9M"], + round: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + substitute: ["9M"], + surf: ["9M"], + sweetkiss: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + upperhand: ["9M"], + voltswitch: ["9M"], + volttackle: ["9M"], + wildcharge: ["9M"], + wish: ["9M"], + zapcannon: ["9M"], + }, + }, + raichualola: { + learnset: { + agility: ["9M"], + alluringvoice: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + calmmind: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + dazzlinggleam: ["9M"], + dig: ["9M"], + discharge: ["9M"], + doubleteam: ["9M"], + drainingkiss: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + feint: ["9M"], + flail: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + megakick: ["9M"], + nastyplot: ["9M"], + nuzzle: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + risingvoltage: ["9M"], + round: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + speedswap: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + surf: ["9M"], + sweetkiss: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + upperhand: ["9M"], + voltswitch: ["9M"], + volttackle: ["9M"], + wildcharge: ["9M"], + wish: ["9M"], + zapcannon: ["9M"], + }, + }, + clefable: { + learnset: { + afteryou: ["9M"], + airslash: ["9M"], + alluringvoice: ["9M"], + amnesia: ["9M"], + batonpass: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + brickbreak: ["9M"], + calmmind: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + copycat: ["9M"], + cosmicpower: ["9M"], + dazzlinggleam: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + drainingkiss: ["9M"], + dualwingbeat: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + followme: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gravity: ["9M"], + healpulse: ["9M"], + healingwish: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + knockoff: ["9M"], + lifedew: ["9M"], + lightscreen: ["9M"], + meteorbeam: ["9M"], + meteormash: ["9M"], + mistyexplosion: ["9M"], + mistyterrain: ["9M"], + moonblast: ["9M"], + moonlight: ["9M"], + mysticalfire: ["9M"], + nightshade: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + sing: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stealthrock: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + sweetkiss: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + tickle: ["9M"], + triattack: ["9M"], + trick: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + wish: ["9M"], + wonderroom: ["9M"], + zenheadbutt: ["9M"], + }, + }, + ninetales: { + learnset: { + agility: ["9M"], + attract: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + bodyslam: ["9M"], + burningjealousy: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + confuseray: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + disable: ["9M"], + doubleedge: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + faketears: ["9M"], + fireblast: ["9M"], + firespin: ["9M"], + flail: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + healingwish: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + hypnosis: ["9M"], + imprison: ["9M"], + inferno: ["9M"], + irontail: ["9M"], + memento: ["9M"], + mysticalfire: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + overheat: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psyshock: ["9M"], + quickattack: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scorchingsands: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spite: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + tailslap: ["9M"], + weatherball: ["9M"], + willowisp: ["9M"], + zenheadbutt: ["9M"], + }, + }, + ninetalesalola: { + learnset: { + agility: ["9M"], + attract: ["9M"], + auroraveil: ["9M"], + avalanche: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + confuseray: ["9M"], + darkpulse: ["9M"], + dazzlinggleam: ["9M"], + dig: ["9M"], + disable: ["9M"], + doubleedge: ["9M"], + drainingkiss: ["9M"], + encore: ["9M"], + endure: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + foulplay: ["9M"], + freezedry: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + hypnosis: ["9M"], + icebeam: ["9M"], + iceshard: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + irontail: ["9M"], + mistyterrain: ["9M"], + moonblast: ["9M"], + nastyplot: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + playrough: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + safeguard: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + spite: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + tailslap: ["9M"], + tripleaxel: ["9M"], + weatherball: ["9M"], + wonderroom: ["9M"], + zenheadbutt: ["9M"], + }, + }, + arcanine: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + burnup: ["9M"], + charm: ["9M"], + closecombat: ["9M"], + covet: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragonpulse: ["9M"], + endure: ["9M"], + extremespeed: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + gigaimpact: ["9M"], + heatcrash: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + morningsun: ["9M"], + outrage: ["9M"], + overheat: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + ragingfury: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + round: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + thrash: ["9M"], + thunderfang: ["9M"], + wildcharge: ["9M"], + willowisp: ["9M"], + }, + }, + arcaninehisui: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + burnup: ["9M"], + closecombat: ["9M"], + covet: ["9M"], + crunch: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragonpulse: ["9M"], + endure: ["9M"], + extremespeed: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + gigaimpact: ["9M"], + headsmash: ["9M"], + heatcrash: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + morningsun: ["9M"], + outrage: ["9M"], + overheat: ["9M"], + powergem: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + ragingfury: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + smartstrike: ["9M"], + snarl: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stealthrock: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + thrash: ["9M"], + thunderfang: ["9M"], + wildcharge: ["9M"], + willowisp: ["9M"], + }, + }, + alakazam: { + learnset: { + allyswitch: ["9M"], + attract: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + dazzlinggleam: ["9M"], + disable: ["9M"], + doubleteam: ["9M"], + drainpunch: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + foulplay: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + guardsplit: ["9M"], + guardswap: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + imprison: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + megakick: ["9M"], + nastyplot: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psychicterrain: ["9M"], + psychocut: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + recover: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roleplay: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + speedswap: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + triattack: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + wonderroom: ["9M"], + zenheadbutt: ["9M"], + }, + }, + machamp: { + learnset: { + assurance: ["9M"], + attract: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + bulletpunch: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + counter: ["9M"], + crosschop: ["9M"], + crosspoison: ["9M"], + darkestlariat: ["9M"], + detect: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + dynamicpunch: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + knockoff: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + payback: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + seismictoss: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + stormthrow: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + tickle: ["9M"], + wideguard: ["9M"], + }, + }, + victreebel: { + learnset: { + acidspray: ["9M"], + bodyslam: ["9M"], + bugbite: ["9M"], + bulletseed: ["9M"], + clearsmog: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + gastroacid: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + hyperbeam: ["9M"], + ingrain: ["9M"], + knockoff: ["9M"], + leafblade: ["9M"], + leafstorm: ["9M"], + leechlife: ["9M"], + lunge: ["9M"], + poisonjab: ["9M"], + poisonpowder: ["9M"], + pounce: ["9M"], + powerwhip: ["9M"], + protect: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + sleeppowder: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spitup: ["9M"], + stockpile: ["9M"], + strengthsap: ["9M"], + stunspore: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swallow: ["9M"], + sweetscent: ["9M"], + swordsdance: ["9M"], + synthesis: ["9M"], + thief: ["9M"], + tickle: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + trailblaze: ["9M"], + venoshock: ["9M"], + weatherball: ["9M"], + worryseed: ["9M"], + wrap: ["9M"], + }, + }, + slowbro: { + learnset: { + amnesia: ["9M"], + avalanche: ["9M"], + belch: ["9M"], + bellydrum: ["9M"], + blizzard: ["9M"], + block: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + chillingwater: ["9M"], + curse: ["9M"], + dig: ["9M"], + disable: ["9M"], + dive: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + foulplay: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + healpulse: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + liquidation: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + nastyplot: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + razorshell: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scald: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + slackoff: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + thunderwave: ["9M"], + triattack: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + wonderroom: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + slowbrogalar: { + learnset: { + acidspray: ["9M"], + amnesia: ["9M"], + avalanche: ["9M"], + belch: ["9M"], + bellydrum: ["9M"], + blizzard: ["9M"], + block: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + chillingwater: ["9M"], + curse: ["9M"], + dig: ["9M"], + disable: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + foulplay: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + haze: ["9M"], + healpulse: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + liquidation: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + nastyplot: ["9M"], + poisonjab: ["9M"], + powergem: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psychicterrain: ["9M"], + psychup: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + razorshell: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + round: ["9M"], + safeguard: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + shellsidearm: ["9M"], + skillswap: ["9M"], + slackoff: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + thunderwave: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + triattack: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + venoshock: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + wonderroom: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + gengar: { + learnset: { + acidspray: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + clearsmog: ["9M"], + confuseray: ["9M"], + corrosivegas: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + dazzlinggleam: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + drainpunch: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + foulplay: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + haze: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + hypnosis: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + knockoff: ["9M"], + meanlook: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + perishsong: ["9M"], + phantomforce: ["9M"], + poisonjab: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + raindance: ["9M"], + reflecttype: ["9M"], + rest: ["9M"], + round: ["9M"], + scaryface: ["9M"], + selfdestruct: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowpunch: ["9M"], + skillswap: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snore: ["9M"], + spite: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + venoshock: ["9M"], + willowisp: ["9M"], + wonderroom: ["9M"], + }, + }, + kangaskhan: { + learnset: { + assurance: ["9M"], + attract: ["9M"], + avalanche: ["9M"], + beatup: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + circlethrow: ["9M"], + counter: ["9M"], + crunch: ["9M"], + dig: ["9M"], + disable: ["9M"], + doublehit: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + dynamicpunch: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + hammerarm: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + irontail: ["9M"], + lastresort: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + outrage: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + safeguard: ["9M"], + sandstorm: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + terrainpulse: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderbolt: ["9M"], + uproar: ["9M"], + whirlpool: ["9M"], + }, + }, + starmie: { + learnset: { + agility: ["9M"], + allyswitch: ["9M"], + ancientpower: ["9M"], + aquajet: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bulkup: ["9M"], + chargebeam: ["9M"], + chillingwater: ["9M"], + confuseray: ["9M"], + cosmicpower: ["9M"], + dazzlinggleam: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + endure: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + flashcannon: ["9M"], + flipturn: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gravity: ["9M"], + gyroball: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icespinner: ["9M"], + icywind: ["9M"], + lightscreen: ["9M"], + liquidation: ["9M"], + meteorbeam: ["9M"], + minimize: ["9M"], + powergem: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psychocut: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + rapidspin: ["9M"], + recover: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scald: ["9M"], + selfdestruct: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + substitute: ["9M"], + surf: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + triattack: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + whirlpool: ["9M"], + wonderroom: ["9M"], + zenheadbutt: ["9M"], + }, + }, + pinsir: { + learnset: { + aerialace: ["9M"], + attract: ["9M"], + bind: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bugbite: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + circlethrow: ["9M"], + closecombat: ["9M"], + detect: ["9M"], + dig: ["9M"], + doublehit: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + feint: ["9M"], + flail: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + guillotine: ["9M"], + hardpress: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + lunge: ["9M"], + pounce: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + seismictoss: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stoneedge: ["9M"], + stormthrow: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + swordsdance: ["9M"], + thief: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + xscissor: ["9M"], + }, + }, + tauros: { + learnset: { + assurance: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + closecombat: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + flamethrower: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lashout: ["9M"], + megahorn: ["9M"], + outrage: ["9M"], + payback: ["9M"], + protect: ["9M"], + ragingbull: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + swagger: ["9M"], + thief: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + thunder: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + whirlpool: ["9M"], + wildcharge: ["9M"], + zenheadbutt: ["9M"], + }, + }, + taurospaldeacombat: { + learnset: { + assurance: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + closecombat: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drillrun: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + gigaimpact: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lashout: ["9M"], + megahorn: ["9M"], + outrage: ["9M"], + protect: ["9M"], + ragingbull: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + swagger: ["9M"], + thief: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + wildcharge: ["9M"], + zenheadbutt: ["9M"], + }, + }, + taurospaldeablaze: { + learnset: { + bodypress: ["9M"], + bodyslam: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + closecombat: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drillrun: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + gigaimpact: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lashout: ["9M"], + megahorn: ["9M"], + outrage: ["9M"], + overheat: ["9M"], + protect: ["9M"], + ragingbull: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + thrash: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + wildcharge: ["9M"], + willowisp: ["9M"], + zenheadbutt: ["9M"], + }, + }, + taurospaldeaaqua: { + learnset: { + aquajet: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + closecombat: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drillrun: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + gigaimpact: ["9M"], + highhorsepower: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lashout: ["9M"], + liquidation: ["9M"], + megahorn: ["9M"], + outrage: ["9M"], + protect: ["9M"], + ragingbull: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + surf: ["9M"], + swagger: ["9M"], + thief: ["9M"], + thrash: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + wavecrash: ["9M"], + whirlpool: ["9M"], + wildcharge: ["9M"], + zenheadbutt: ["9M"], + }, + }, + gyarados: { + learnset: { + aquatail: ["9M"], + avalanche: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + dragoncheer: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dragontail: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + flail: ["9M"], + flamethrower: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hurricane: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icywind: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lashout: ["9M"], + muddywater: ["9M"], + outrage: ["9M"], + payback: ["9M"], + powerwhip: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scald: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + spite: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + temperflare: ["9M"], + thrash: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + whirlpool: ["9M"], + }, + }, + ditto: { + learnset: { + transform: ["9M"], + }, + }, + vaporeon: { + learnset: { + acidarmor: ["9M"], + alluringvoice: ["9M"], + aquaring: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + copycat: ["9M"], + covet: ["9M"], + curse: ["9M"], + detect: ["9M"], + dig: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + flipturn: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + irontail: ["9M"], + lastresort: ["9M"], + liquidation: ["9M"], + mudslap: ["9M"], + muddywater: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + scald: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + wish: ["9M"], + yawn: ["9M"], + }, + }, + jolteon: { + learnset: { + agility: ["9M"], + alluringvoice: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + copycat: ["9M"], + covet: ["9M"], + curse: ["9M"], + detect: ["9M"], + dig: ["9M"], + discharge: ["9M"], + doubleedge: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + lastresort: ["9M"], + lightscreen: ["9M"], + metalsound: ["9M"], + mudslap: ["9M"], + pinmissile: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + risingvoltage: ["9M"], + roar: ["9M"], + round: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + thunder: ["9M"], + thunderfang: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + voltswitch: ["9M"], + weatherball: ["9M"], + wildcharge: ["9M"], + wish: ["9M"], + yawn: ["9M"], + }, + }, + flareon: { + learnset: { + alluringvoice: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + burningjealousy: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + copycat: ["9M"], + covet: ["9M"], + curse: ["9M"], + detect: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firespin: ["9M"], + flail: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + lastresort: ["9M"], + lavaplume: ["9M"], + mudslap: ["9M"], + overheat: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + temperflare: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + weatherball: ["9M"], + willowisp: ["9M"], + wish: ["9M"], + yawn: ["9M"], + }, + }, + aerodactyl: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + ancientpower: ["9M"], + assurance: ["9M"], + attract: ["9M"], + bite: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dualwingbeat: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + flamethrower: ["9M"], + fly: ["9M"], + gigaimpact: ["9M"], + heatwave: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + icefang: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + meteorbeam: ["9M"], + payback: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + roost: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + skyattack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + steelwing: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + tailwind: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thunderfang: ["9M"], + whirlwind: ["9M"], + wideguard: ["9M"], + }, + }, + snorlax: { + learnset: { + amnesia: ["9M"], + attract: ["9M"], + belch: ["9M"], + bellydrum: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + block: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + counter: ["9M"], + covet: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + fissure: ["9M"], + flail: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gastroacid: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + hammerarm: ["9M"], + hardpress: ["9M"], + heatcrash: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + ironhead: ["9M"], + lastresort: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + protect: ["9M"], + raindance: ["9M"], + recycle: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + screech: ["9M"], + seedbomb: ["9M"], + selfdestruct: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stockpile: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + supercellslam: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swallow: ["9M"], + terrainpulse: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + wildcharge: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + dragonite: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + aquajet: ["9M"], + aquatail: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + dive: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dragontail: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + extremespeed: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + firespin: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + fly: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + haze: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hurricane: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icespinner: ["9M"], + icywind: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + outrage: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + roost: ["9M"], + round: ["9M"], + safeguard: ["9M"], + sandstorm: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + steelwing: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + surf: ["9M"], + tailwind: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + whirlwind: ["9M"], + wrap: ["9M"], + }, + }, + meganium: { + learnset: { + ancientpower: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + bulletseed: ["9M"], + charm: ["9M"], + counter: ["9M"], + curse: ["9M"], + dazzlinggleam: ["9M"], + doubleedge: ["9M"], + dragontail: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + frenzyplant: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + healpulse: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + ingrain: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + leafblade: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + lightscreen: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + petalblizzard: ["9M"], + petaldance: ["9M"], + poisonpowder: ["9M"], + pollenpuff: ["9M"], + protect: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + seedbomb: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + solarblade: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + sweetscent: ["9M"], + swordsdance: ["9M"], + synthesis: ["9M"], + trailblaze: ["9M"], + weatherball: ["9M"], + zenheadbutt: ["9M"], + }, + }, + typhlosion: { + learnset: { + aerialace: ["9M"], + blastburn: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + burnup: ["9M"], + burningjealousy: ["9M"], + covet: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + eruption: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firepunch: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + inferno: ["9M"], + ironhead: ["9M"], + lavaplume: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + overheat: ["9M"], + playrough: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scorchingsands: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + temperflare: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + wildcharge: ["9M"], + willowisp: ["9M"], + zenheadbutt: ["9M"], + }, + }, + typhlosionhisui: { + learnset: { + aerialace: ["9M"], + blastburn: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + burnup: ["9M"], + burningjealousy: ["9M"], + calmmind: ["9M"], + confuseray: ["9M"], + covet: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + eruption: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firepunch: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + heatwave: ["9M"], + hex: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + infernalparade: ["9M"], + inferno: ["9M"], + ironhead: ["9M"], + lavaplume: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + mysticalfire: ["9M"], + nightshade: ["9M"], + overheat: ["9M"], + playrough: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + round: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spite: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + temperflare: ["9M"], + thunderpunch: ["9M"], + wildcharge: ["9M"], + willowisp: ["9M"], + zenheadbutt: ["9M"], + }, + }, + feraligatr: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + ancientpower: ["9M"], + aquajet: ["9M"], + aquatail: ["9M"], + avalanche: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + block: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + counter: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + flatter: ["9M"], + fling: ["9M"], + flipturn: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hydrocannon: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + irontail: ["9M"], + lashout: ["9M"], + liquidation: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + muddywater: ["9M"], + outrage: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + spite: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + thief: ["9M"], + thrash: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + whirlpool: ["9M"], + }, + }, + ariados: { + learnset: { + acidspray: ["9M"], + agility: ["9M"], + assurance: ["9M"], + batonpass: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + bugbite: ["9M"], + bugbuzz: ["9M"], + crosspoison: ["9M"], + dig: ["9M"], + disable: ["9M"], + electroweb: ["9M"], + endure: ["9M"], + facade: ["9M"], + fellstinger: ["9M"], + firstimpression: ["9M"], + focusenergy: ["9M"], + foulplay: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + infestation: ["9M"], + knockoff: ["9M"], + leechlife: ["9M"], + lunge: ["9M"], + megahorn: ["9M"], + nightshade: ["9M"], + nightslash: ["9M"], + pinmissile: ["9M"], + poisonjab: ["9M"], + pounce: ["9M"], + protect: ["9M"], + psychic: ["9M"], + ragepowder: ["9M"], + rest: ["9M"], + round: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowsneak: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spite: ["9M"], + stickyweb: ["9M"], + stompingtantrum: ["9M"], + stringshot: ["9M"], + strugglebug: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + toxicthread: ["9M"], + trailblaze: ["9M"], + venoshock: ["9M"], + xscissor: ["9M"], + }, + }, + ampharos: { + learnset: { + afteryou: ["9M"], + agility: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + confuseray: ["9M"], + cottonguard: ["9M"], + cottonspore: ["9M"], + dazzlinggleam: ["9M"], + dig: ["9M"], + discharge: ["9M"], + doubleedge: ["9M"], + dragoncheer: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + flatter: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + magneticflux: ["9M"], + megakick: ["9M"], + meteorbeam: ["9M"], + outrage: ["9M"], + paraboliccharge: ["9M"], + powergem: ["9M"], + protect: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + risingvoltage: ["9M"], + roar: ["9M"], + round: ["9M"], + safeguard: ["9M"], + screech: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + supercellslam: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + voltswitch: ["9M"], + wildcharge: ["9M"], + zapcannon: ["9M"], + }, + }, + azumarill: { + learnset: { + alluringvoice: ["9M"], + amnesia: ["9M"], + aquajet: ["9M"], + aquaring: ["9M"], + aquatail: ["9M"], + bellydrum: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + copycat: ["9M"], + dig: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + drainingkiss: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icespinner: ["9M"], + icywind: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lightscreen: ["9M"], + liquidation: ["9M"], + mistyexplosion: ["9M"], + mistyterrain: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + muddywater: ["9M"], + perishsong: ["9M"], + playrough: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + sing: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + soak: ["9M"], + substitute: ["9M"], + superpower: ["9M"], + surf: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + whirlpool: ["9M"], + }, + }, + politoed: { + learnset: { + amnesia: ["9M"], + attract: ["9M"], + bellydrum: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + dig: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + hypnosis: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + liquidation: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + muddywater: ["9M"], + perishsong: ["9M"], + pound: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + screech: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + substitute: ["9M"], + surf: ["9M"], + swagger: ["9M"], + thief: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + }, + }, + espeon: { + learnset: { + alluringvoice: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + confuseray: ["9M"], + copycat: ["9M"], + covet: ["9M"], + curse: ["9M"], + dazzlinggleam: ["9M"], + detect: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drainingkiss: ["9M"], + endure: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + focusenergy: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gravity: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + imprison: ["9M"], + lastresort: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + morningsun: ["9M"], + mudslap: ["9M"], + powergem: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicfangs: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + thunderwave: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + weatherball: ["9M"], + wish: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + umbreon: { + learnset: { + alluringvoice: ["9M"], + assurance: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + confuseray: ["9M"], + copycat: ["9M"], + covet: ["9M"], + crunch: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + detect: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + focusenergy: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + guardswap: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + lashout: ["9M"], + lastresort: ["9M"], + lightscreen: ["9M"], + meanlook: ["9M"], + moonlight: ["9M"], + mudslap: ["9M"], + payback: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + spite: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderwave: ["9M"], + tickle: ["9M"], + torment: ["9M"], + toxic: ["9M"], + trailblaze: ["9M"], + weatherball: ["9M"], + wish: ["9M"], + yawn: ["9M"], + }, + }, + slowking: { + learnset: { + amnesia: ["9M"], + avalanche: ["9M"], + belch: ["9M"], + bellydrum: ["9M"], + blizzard: ["9M"], + block: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + chillingwater: ["9M"], + chillyreception: ["9M"], + curse: ["9M"], + dig: ["9M"], + disable: ["9M"], + dive: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + foulplay: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + healpulse: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + liquidation: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + nastyplot: ["9M"], + powergem: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + razorshell: ["9M"], + reflect: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scald: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + slackoff: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + swagger: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + triattack: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + wonderroom: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + slowkinggalar: { + learnset: { + acidspray: ["9M"], + amnesia: ["9M"], + avalanche: ["9M"], + belch: ["9M"], + bellydrum: ["9M"], + blizzard: ["9M"], + block: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + chillingwater: ["9M"], + chillyreception: ["9M"], + curse: ["9M"], + dig: ["9M"], + disable: ["9M"], + dive: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + eeriespell: ["9M"], + endure: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + foulplay: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + healpulse: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + liquidation: ["9M"], + lowsweep: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + nastyplot: ["9M"], + poisonjab: ["9M"], + powergem: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + razorshell: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + slackoff: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snarl: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + stompingtantrum: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + triattack: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + venoshock: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + wonderroom: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + forretress: { + learnset: { + bodypress: ["9M"], + bodyslam: ["9M"], + bugbite: ["9M"], + bugbuzz: ["9M"], + bulldoze: ["9M"], + counter: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drillrun: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + explosion: ["9M"], + facade: ["9M"], + flail: ["9M"], + flashcannon: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + gravity: ["9M"], + gyroball: ["9M"], + hardpress: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + icespinner: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + lightscreen: ["9M"], + lunge: ["9M"], + magnetrise: ["9M"], + metalsound: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + pinmissile: ["9M"], + poisonjab: ["9M"], + pounce: ["9M"], + powertrick: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rapidspin: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + seedbomb: ["9M"], + selfdestruct: ["9M"], + sleeptalk: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spikes: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + steelroller: ["9M"], + stoneedge: ["9M"], + strugglebug: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + thunderwave: ["9M"], + toxicspikes: ["9M"], + venoshock: ["9M"], + voltswitch: ["9M"], + zapcannon: ["9M"], + }, + }, + steelix: { + learnset: { + ancientpower: ["9M"], + attract: ["9M"], + bind: ["9M"], + block: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + crunch: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + drillrun: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + fissure: ["9M"], + flail: ["9M"], + flashcannon: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + headsmash: ["9M"], + heavyslam: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + icefang: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + magnetrise: ["9M"], + meteorbeam: ["9M"], + payback: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + rockpolish: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + screech: ["9M"], + selfdestruct: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + steelroller: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + taunt: ["9M"], + thunderfang: ["9M"], + wideguard: ["9M"], + }, + }, + scizor: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + assurance: ["9M"], + batonpass: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bugbite: ["9M"], + bugbuzz: ["9M"], + bulletpunch: ["9M"], + closecombat: ["9M"], + counter: ["9M"], + curse: ["9M"], + defog: ["9M"], + doublehit: ["9M"], + doubleteam: ["9M"], + doubleedge: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + facade: ["9M"], + feint: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + hardpress: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + knockoff: ["9M"], + lightscreen: ["9M"], + lunge: ["9M"], + nightslash: ["9M"], + pounce: ["9M"], + protect: ["9M"], + psychocut: ["9M"], + quickattack: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roost: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + steelbeam: ["9M"], + steelwing: ["9M"], + strugglebug: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + swordsdance: ["9M"], + tailwind: ["9M"], + thief: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + vacuumwave: ["9M"], + xscissor: ["9M"], + }, + }, + heracross: { + learnset: { + aerialace: ["9M"], + assurance: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bugbite: ["9M"], + bugbuzz: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + bulletseed: ["9M"], + circlethrow: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + counter: ["9M"], + curse: ["9M"], + detect: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + feint: ["9M"], + flail: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + knockoff: ["9M"], + lowkick: ["9M"], + lunge: ["9M"], + megahorn: ["9M"], + nightslash: ["9M"], + pinmissile: ["9M"], + pounce: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + seismictoss: ["9M"], + shadowclaw: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + spikes: ["9M"], + stoneedge: ["9M"], + strugglebug: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + thief: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + trailblaze: ["9M"], + upperhand: ["9M"], + vacuumwave: ["9M"], + }, + }, + skarmory: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + assurance: ["9M"], + bodypress: ["9M"], + bravebird: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + drillpeck: ["9M"], + drillrun: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + facade: ["9M"], + feint: ["9M"], + flashcannon: ["9M"], + fly: ["9M"], + gigaimpact: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + metalsound: ["9M"], + nightslash: ["9M"], + payback: ["9M"], + protect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + roost: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + skyattack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + spikes: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + tailwind: ["9M"], + taunt: ["9M"], + thief: ["9M"], + whirlwind: ["9M"], + xscissor: ["9M"], + }, + }, + houndoom: { + learnset: { + beatup: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + burningjealousy: ["9M"], + comeuppance: ["9M"], + counter: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + destinybond: ["9M"], + doubleedge: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + feint: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + inferno: ["9M"], + irontail: ["9M"], + lashout: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + nastyplot: ["9M"], + overheat: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + round: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + snarl: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spite: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + superfang: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderfang: ["9M"], + torment: ["9M"], + toxic: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + willowisp: ["9M"], + }, + }, + tyranitar: { + learnset: { + aerialace: ["9M"], + ancientpower: ["9M"], + assurance: ["9M"], + avalanche: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + crunch: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + focuspunch: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + hardpress: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + muddywater: ["9M"], + outrage: ["9M"], + payback: ["9M"], + powergem: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snarl: ["9M"], + snore: ["9M"], + spite: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thrash: ["9M"], + thunder: ["9M"], + thunderfang: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + uproar: ["9M"], + }, + }, + pelipper: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + aquaring: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + bravebird: ["9M"], + chillingwater: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + fling: ["9M"], + fly: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + helpinghand: ["9M"], + hurricane: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + knockoff: ["9M"], + liquidation: ["9M"], + muddywater: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roost: ["9M"], + round: ["9M"], + seedbomb: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + soak: ["9M"], + spitup: ["9M"], + steelwing: ["9M"], + stockpile: ["9M"], + substitute: ["9M"], + surf: ["9M"], + swallow: ["9M"], + tailwind: ["9M"], + thief: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + wideguard: ["9M"], + }, + }, + gardevoir: { + learnset: { + alluringvoice: ["9M"], + aurasphere: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + confuseray: ["9M"], + dazzlinggleam: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + doubleteam: ["9M"], + drainingkiss: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gravity: ["9M"], + guardswap: ["9M"], + healpulse: ["9M"], + healingwish: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + hypnosis: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + knockoff: ["9M"], + lifedew: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + meanlook: ["9M"], + memento: ["9M"], + mistyexplosion: ["9M"], + mistyterrain: ["9M"], + moonblast: ["9M"], + mysticalfire: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + shadowsneak: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + tripleaxel: ["9M"], + vacuumwave: ["9M"], + willowisp: ["9M"], + wish: ["9M"], + wonderroom: ["9M"], + zenheadbutt: ["9M"], + }, + }, + sableye: { + learnset: { + aerialace: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + calmmind: ["9M"], + confuseray: ["9M"], + darkpulse: ["9M"], + dazzlinggleam: ["9M"], + detect: ["9M"], + dig: ["9M"], + disable: ["9M"], + drainpunch: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + feint: ["9M"], + firepunch: ["9M"], + flatter: ["9M"], + fling: ["9M"], + focuspunch: ["9M"], + foulplay: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + gravity: ["9M"], + gyroball: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + meanlook: ["9M"], + megakick: ["9M"], + metalburst: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + nightslash: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + phantomforce: ["9M"], + poisonjab: ["9M"], + poltergeist: ["9M"], + powergem: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + quash: ["9M"], + raindance: ["9M"], + recover: ["9M"], + reflect: ["9M"], + rest: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowpunch: ["9M"], + shadowsneak: ["9M"], + skillswap: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + spite: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + torment: ["9M"], + trick: ["9M"], + willowisp: ["9M"], + wonderroom: ["9M"], + xscissor: ["9M"], + zenheadbutt: ["9M"], + }, + }, + aggron: { + learnset: { + ancientpower: ["9M"], + attract: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + crunch: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragonclaw: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + gigaimpact: ["9M"], + headsmash: ["9M"], + heavyslam: ["9M"], + highhorsepower: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + metalburst: ["9M"], + metalsound: ["9M"], + meteorbeam: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + payback: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + steelroller: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + uproar: ["9M"], + whirlpool: ["9M"], + }, + }, + medicham: { + learnset: { + acupressure: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + aurasphere: ["9M"], + axekick: ["9M"], + batonpass: ["9M"], + blazekick: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulletpunch: ["9M"], + calmmind: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + counter: ["9M"], + detect: ["9M"], + drainpunch: ["9M"], + dynamicpunch: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + feint: ["9M"], + firepunch: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gravity: ["9M"], + guardswap: ["9M"], + helpinghand: ["9M"], + highjumpkick: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + imprison: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + poisonjab: ["9M"], + powerswap: ["9M"], + powertrick: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicterrain: ["9M"], + psychocut: ["9M"], + psyshock: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + recover: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thunderpunch: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + upperhand: ["9M"], + vacuumwave: ["9M"], + zenheadbutt: ["9M"], + }, + }, + manectric: { + learnset: { + agility: ["9M"], + attract: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + crunch: ["9M"], + curse: ["9M"], + discharge: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + flamethrower: ["9M"], + gigaimpact: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icefang: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + overheat: ["9M"], + pounce: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + risingvoltage: ["9M"], + roar: ["9M"], + round: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + substitute: ["9M"], + supercellslam: ["9M"], + switcheroo: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderfang: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + voltswitch: ["9M"], + wildcharge: ["9M"], + }, + }, + sharpedo: { + learnset: { + agility: ["9M"], + ancientpower: ["9M"], + aquajet: ["9M"], + assurance: ["9M"], + attract: ["9M"], + avalanche: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bounce: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + closecombat: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + destinybond: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + flipturn: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icywind: ["9M"], + liquidation: ["9M"], + nightslash: ["9M"], + payback: ["9M"], + poisonfang: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scald: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + substitute: ["9M"], + surf: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thrash: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + whirlpool: ["9M"], + zenheadbutt: ["9M"], + }, + }, + camerupt: { + learnset: { + amnesia: ["9M"], + ancientpower: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + burningjealousy: ["9M"], + charm: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + eruption: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firespin: ["9M"], + fissure: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + flashcannon: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + growth: ["9M"], + heatcrash: ["9M"], + heatwave: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + ironhead: ["9M"], + lashout: ["9M"], + lavaplume: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + overheat: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + selfdestruct: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spitup: ["9M"], + stealthrock: ["9M"], + stockpile: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swallow: ["9M"], + temperflare: ["9M"], + trailblaze: ["9M"], + willowisp: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + torkoal: { + learnset: { + amnesia: ["9M"], + ancientpower: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + burningjealousy: ["9M"], + clearsmog: ["9M"], + curse: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + eruption: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firespin: ["9M"], + fissure: ["9M"], + flail: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + heatcrash: ["9M"], + heatwave: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + inferno: ["9M"], + irondefense: ["9M"], + lavaplume: ["9M"], + overheat: ["9M"], + protect: ["9M"], + rapidspin: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scorchingsands: ["9M"], + selfdestruct: ["9M"], + shellsmash: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + temperflare: ["9M"], + weatherball: ["9M"], + willowisp: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + altaria: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + alluringvoice: ["9M"], + bodyslam: ["9M"], + bravebird: ["9M"], + breakingswipe: ["9M"], + bulldoze: ["9M"], + cottonguard: ["9M"], + dazzlinggleam: ["9M"], + defog: ["9M"], + doubleedge: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dualwingbeat: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + fireblast: ["9M"], + firespin: ["9M"], + flamethrower: ["9M"], + fly: ["9M"], + gigaimpact: ["9M"], + haze: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + moonblast: ["9M"], + outrage: ["9M"], + perishsong: ["9M"], + playrough: ["9M"], + pluck: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + roost: ["9M"], + round: ["9M"], + safeguard: ["9M"], + sing: ["9M"], + skyattack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + solarbeam: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + tailwind: ["9M"], + thief: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + weatherball: ["9M"], + willowisp: ["9M"], + wonderroom: ["9M"], + }, + }, + milotic: { + learnset: { + alluringvoice: ["9M"], + aquaring: ["9M"], + aquatail: ["9M"], + attract: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + coil: ["9M"], + confuseray: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + dragoncheer: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + drainingkiss: ["9M"], + endure: ["9M"], + facade: ["9M"], + flail: ["9M"], + flipturn: ["9M"], + gigaimpact: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + hypnosis: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lifedew: ["9M"], + lightscreen: ["9M"], + mirrorcoat: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + protect: ["9M"], + psychup: ["9M"], + raindance: ["9M"], + recover: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scald: ["9M"], + scaleshot: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + substitute: ["9M"], + surf: ["9M"], + tickle: ["9M"], + tripleaxel: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + wrap: ["9M"], + }, + }, + castform: { + learnset: { + amnesia: ["9M"], + attract: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + chillingwater: ["9M"], + cosmicpower: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + flamethrower: ["9M"], + futuresight: ["9M"], + guardswap: ["9M"], + hex: ["9M"], + hurricane: ["9M"], + hydropump: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scald: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + solarbeam: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + weatherball: ["9M"], + }, + }, + banette: { + learnset: { + burningjealousy: ["9M"], + calmmind: ["9M"], + chargebeam: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + dazzlinggleam: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + fling: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + magicroom: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + phantomforce: ["9M"], + poltergeist: ["9M"], + pounce: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roleplay: ["9M"], + round: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowpunch: ["9M"], + shadowsneak: ["9M"], + skillswap: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + spite: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + torment: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + willowisp: ["9M"], + zenheadbutt: ["9M"], + }, + }, + chimecho: { + learnset: { + allyswitch: ["9M"], + batonpass: ["9M"], + boomburst: ["9M"], + calmmind: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + cosmicpower: ["9M"], + curse: ["9M"], + dazzlinggleam: ["9M"], + disable: ["9M"], + doubleedge: ["9M"], + drainingkiss: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flashcannon: ["9M"], + futuresight: ["9M"], + grassknot: ["9M"], + gravity: ["9M"], + healbell: ["9M"], + healpulse: ["9M"], + healingwish: ["9M"], + helpinghand: ["9M"], + hypervoice: ["9M"], + hypnosis: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + knockoff: ["9M"], + lightscreen: ["9M"], + metalsound: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + recover: ["9M"], + recycle: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + screech: ["9M"], + selfdestruct: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + taunt: ["9M"], + thunderwave: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + uproar: ["9M"], + wish: ["9M"], + wrap: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + absol: { + learnset: { + aerialace: ["9M"], + airslash: ["9M"], + assurance: ["9M"], + attract: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + brutalswing: ["9M"], + calmmind: ["9M"], + closecombat: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + detect: ["9M"], + doubleteam: ["9M"], + doubleedge: ["9M"], + endure: ["9M"], + facade: ["9M"], + feint: ["9M"], + fireblast: ["9M"], + flamethrower: ["9M"], + focusenergy: ["9M"], + foulplay: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + meanlook: ["9M"], + megahorn: ["9M"], + nightslash: ["9M"], + payback: ["9M"], + perishsong: ["9M"], + phantomforce: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychocut: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowsneak: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + willowisp: ["9M"], + xscissor: ["9M"], + zenheadbutt: ["9M"], + }, + }, + glalie: { + learnset: { + avalanche: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + block: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + disable: ["9M"], + doubleteam: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + explosion: ["9M"], + facade: ["9M"], + faketears: ["9M"], + foulplay: ["9M"], + freezedry: ["9M"], + frostbreath: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + iceshard: ["9M"], + icespinner: ["9M"], + iciclecrash: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + ironhead: ["9M"], + lightscreen: ["9M"], + payback: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + scaryface: ["9M"], + selfdestruct: ["9M"], + shadowball: ["9M"], + sheercold: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + spikes: ["9M"], + spite: ["9M"], + steelroller: ["9M"], + substitute: ["9M"], + switcheroo: ["9M"], + taunt: ["9M"], + trailblaze: ["9M"], + waterpulse: ["9M"], + weatherball: ["9M"], + }, + }, + torterra: { + learnset: { + amnesia: ["9M"], + attract: ["9M"], + bite: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + bulletseed: ["9M"], + crunch: ["9M"], + curse: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + frenzyplant: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + hardpress: ["9M"], + headlongrush: ["9M"], + heavyslam: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + lightscreen: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + protect: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + seedbomb: ["9M"], + shellsmash: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spitup: ["9M"], + stealthrock: ["9M"], + stockpile: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + swallow: ["9M"], + swordsdance: ["9M"], + synthesis: ["9M"], + thrash: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + wideguard: ["9M"], + woodhammer: ["9M"], + worryseed: ["9M"], + zenheadbutt: ["9M"], + }, + }, + infernape: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + attract: ["9M"], + aurasphere: ["9M"], + blastburn: ["9M"], + blazekick: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + burningjealousy: ["9M"], + calmmind: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + counter: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + feint: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + machpunch: ["9M"], + mudslap: ["9M"], + nastyplot: ["9M"], + overheat: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + psychup: ["9M"], + ragingfury: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + shadowclaw: ["9M"], + slackoff: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stealthrock: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + switcheroo: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + torment: ["9M"], + uturn: ["9M"], + upperhand: ["9M"], + uproar: ["9M"], + vacuumwave: ["9M"], + willowisp: ["9M"], + zenheadbutt: ["9M"], + }, + }, + empoleon: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + aquajet: ["9M"], + aquaring: ["9M"], + attract: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + dig: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + drillpeck: ["9M"], + dualwingbeat: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + flipturn: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hydrocannon: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icespinner: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + liquidation: ["9M"], + metalsound: ["9M"], + mudslap: ["9M"], + powertrip: ["9M"], + protect: ["9M"], + psychup: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + roost: ["9M"], + round: ["9M"], + scaryface: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + surf: ["9M"], + swagger: ["9M"], + swordsdance: ["9M"], + throatchop: ["9M"], + tripleaxel: ["9M"], + uproar: ["9M"], + vacuumwave: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + wavecrash: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + yawn: ["9M"], + }, + }, + luxray: { + learnset: { + agility: ["9M"], + babydolleyes: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + confuseray: ["9M"], + crunch: ["9M"], + discharge: ["9M"], + doubleedge: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + firefang: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + icefang: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + nightslash: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + risingvoltage: ["9M"], + roar: ["9M"], + round: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + supercellslam: ["9M"], + superpower: ["9M"], + swagger: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunder: ["9M"], + thunderfang: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + voltswitch: ["9M"], + wildcharge: ["9M"], + }, + }, + roserade: { + learnset: { + attract: ["9M"], + bodyslam: ["9M"], + bulletseed: ["9M"], + charm: ["9M"], + cottonspore: ["9M"], + dazzlinggleam: ["9M"], + endure: ["9M"], + energyball: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + hyperbeam: ["9M"], + ingrain: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + lifedew: ["9M"], + petalblizzard: ["9M"], + petaldance: ["9M"], + pinmissile: ["9M"], + poisonjab: ["9M"], + powerwhip: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + sleeppowder: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spikes: ["9M"], + stunspore: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + sweetscent: ["9M"], + swordsdance: ["9M"], + synthesis: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + venoshock: ["9M"], + weatherball: ["9M"], + worryseed: ["9M"], + }, + }, + rampardos: { + learnset: { + ancientpower: ["9M"], + assurance: ["9M"], + attract: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + hammerarm: ["9M"], + headsmash: ["9M"], + heavyslam: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + meteorbeam: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + payback: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + supercellslam: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + thief: ["9M"], + thrash: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + whirlwind: ["9M"], + zenheadbutt: ["9M"], + }, + }, + bastiodon: { + learnset: { + ancientpower: ["9M"], + attract: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + block: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + counter: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + fissure: ["9M"], + flamethrower: ["9M"], + flashcannon: ["9M"], + focusenergy: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + guardsplit: ["9M"], + hardpress: ["9M"], + heavyslam: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + metalburst: ["9M"], + metalsound: ["9M"], + meteorbeam: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + powergem: ["9M"], + protect: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + screech: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + steelroller: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thunder: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + wideguard: ["9M"], + }, + }, + lopunny: { + learnset: { + acrobatics: ["9M"], + afteryou: ["9M"], + agility: ["9M"], + assurance: ["9M"], + attract: ["9M"], + aurasphere: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + blizzard: ["9M"], + bounce: ["9M"], + brutalswing: ["9M"], + charm: ["9M"], + circlethrow: ["9M"], + closecombat: ["9M"], + copycat: ["9M"], + cosmicpower: ["9M"], + cottonguard: ["9M"], + dig: ["9M"], + doublehit: ["9M"], + drainpunch: ["9M"], + drainingkiss: ["9M"], + dynamicpunch: ["9M"], + encore: ["9M"], + endure: ["9M"], + entrainment: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + firepunch: ["9M"], + flail: ["9M"], + flatter: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + healingwish: ["9M"], + helpinghand: ["9M"], + highjumpkick: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + irontail: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + machpunch: ["9M"], + megakick: ["9M"], + mirrorcoat: ["9M"], + payback: ["9M"], + playrough: ["9M"], + pounce: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + round: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + sweetkiss: ["9M"], + switcheroo: ["9M"], + swordsdance: ["9M"], + teeterdance: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + tripleaxel: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + }, + }, + spiritomb: { + learnset: { + allyswitch: ["9M"], + bodyslam: ["9M"], + burningjealousy: ["9M"], + calmmind: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + endure: ["9M"], + facade: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + hypnosis: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + lashout: ["9M"], + memento: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + phantomforce: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + shadowsneak: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + spite: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + taunt: ["9M"], + thief: ["9M"], + toxic: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + uproar: ["9M"], + willowisp: ["9M"], + wonderroom: ["9M"], + }, + }, + garchomp: { + learnset: { + aerialace: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + crunch: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dragontail: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + liquidation: ["9M"], + mudshot: ["9M"], + outrage: ["9M"], + poisonjab: ["9M"], + powergem: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + spikes: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + thrash: ["9M"], + thunderfang: ["9M"], + }, + }, + lucario: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + aurasphere: ["9M"], + bite: ["9M"], + blazekick: ["9M"], + bodyslam: ["9M"], + bonerush: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + bulletpunch: ["9M"], + calmmind: ["9M"], + circlethrow: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + copycat: ["9M"], + counter: ["9M"], + crosschop: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + detect: ["9M"], + dig: ["9M"], + dragonpulse: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + extremespeed: ["9M"], + facade: ["9M"], + feint: ["9M"], + finalgambit: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + healpulse: ["9M"], + helpinghand: ["9M"], + highjumpkick: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + irondefense: ["9M"], + irontail: ["9M"], + lifedew: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + metalsound: ["9M"], + meteormash: ["9M"], + nastyplot: ["9M"], + payback: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + quickattack: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + steelbeam: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + terrainpulse: ["9M"], + thunderpunch: ["9M"], + trailblaze: ["9M"], + upperhand: ["9M"], + vacuumwave: ["9M"], + waterpulse: ["9M"], + zenheadbutt: ["9M"], + }, + }, + hippowdon: { + learnset: { + amnesia: ["9M"], + bite: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + fissure: ["9M"], + gigaimpact: ["9M"], + hardpress: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icefang: ["9M"], + ironhead: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + muddywater: ["9M"], + protect: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scorchingsands: ["9M"], + slackoff: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + spitup: ["9M"], + stealthrock: ["9M"], + stockpile: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + swallow: ["9M"], + thunderfang: ["9M"], + whirlwind: ["9M"], + yawn: ["9M"], + }, + }, + toxicroak: { + learnset: { + acidspray: ["9M"], + aerialace: ["9M"], + assurance: ["9M"], + batonpass: ["9M"], + belch: ["9M"], + bounce: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + bulletpunch: ["9M"], + chillingwater: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + corrosivegas: ["9M"], + counter: ["9M"], + crosschop: ["9M"], + crosspoison: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + drainpunch: ["9M"], + dynamicpunch: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + feint: ["9M"], + flatter: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + nastyplot: ["9M"], + payback: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snore: ["9M"], + spite: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + superfang: ["9M"], + swagger: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + toxic: ["9M"], + upperhand: ["9M"], + vacuumwave: ["9M"], + venoshock: ["9M"], + xscissor: ["9M"], + }, + }, + abomasnow: { + learnset: { + auroraveil: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + bulletseed: ["9M"], + chillingwater: ["9M"], + curse: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + frostbreath: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + growth: ["9M"], + hardpress: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icehammer: ["9M"], + icepunch: ["9M"], + iceshard: ["9M"], + icespinner: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + ingrain: ["9M"], + irontail: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + sheercold: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + solarbeam: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + swagger: ["9M"], + swordsdance: ["9M"], + trailblaze: ["9M"], + waterpulse: ["9M"], + weatherball: ["9M"], + woodhammer: ["9M"], + }, + }, + weavile: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + assurance: ["9M"], + avalanche: ["9M"], + batonpass: ["9M"], + beatup: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + brickbreak: ["9M"], + calmmind: ["9M"], + chillingwater: ["9M"], + counter: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + doublehit: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + feint: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + iceshard: ["9M"], + icespinner: ["9M"], + iciclecrash: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + nastyplot: ["9M"], + nightslash: ["9M"], + payback: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + psychocut: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + round: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + spite: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + trailblaze: ["9M"], + tripleaxel: ["9M"], + upperhand: ["9M"], + waterpulse: ["9M"], + xscissor: ["9M"], + }, + }, + rhyperior: { + learnset: { + avalanche: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + counter: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dragontail: ["9M"], + drillrun: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + guardsplit: ["9M"], + hammerarm: ["9M"], + heatcrash: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + horndrill: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + megakick: ["9M"], + megahorn: ["9M"], + metalburst: ["9M"], + meteorbeam: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + payback: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockpolish: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + rockwrecker: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + supercellslam: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderfang: ["9M"], + thunderpunch: ["9M"], + thunderbolt: ["9M"], + uproar: ["9M"], + }, + }, + leafeon: { + learnset: { + aerialace: ["9M"], + alluringvoice: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + bulletseed: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + copycat: ["9M"], + covet: ["9M"], + curse: ["9M"], + detect: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + focusenergy: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + knockoff: ["9M"], + lastresort: ["9M"], + leafblade: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + solarblade: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + synthesis: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + weatherball: ["9M"], + wish: ["9M"], + xscissor: ["9M"], + yawn: ["9M"], + }, + }, + glaceon: { + learnset: { + alluringvoice: ["9M"], + avalanche: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + copycat: ["9M"], + covet: ["9M"], + curse: ["9M"], + detect: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + focusenergy: ["9M"], + freezedry: ["9M"], + frostbreath: ["9M"], + gigaimpact: ["9M"], + gravity: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + iceshard: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + lastresort: ["9M"], + mirrorcoat: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + tripleaxel: ["9M"], + waterpulse: ["9M"], + weatherball: ["9M"], + wish: ["9M"], + yawn: ["9M"], + }, + }, + gliscor: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + assurance: ["9M"], + attract: ["9M"], + batonpass: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + counter: ["9M"], + crabhammer: ["9M"], + crosspoison: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dualwingbeat: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + feint: ["9M"], + firefang: ["9M"], + fling: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + icefang: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lunge: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + nightslash: ["9M"], + payback: ["9M"], + pinmissile: ["9M"], + poisonjab: ["9M"], + powerwhip: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + snore: ["9M"], + spikes: ["9M"], + stealthrock: ["9M"], + steelwing: ["9M"], + stoneedge: ["9M"], + strugglebug: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + tailwind: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderfang: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + uturn: ["9M"], + venoshock: ["9M"], + xscissor: ["9M"], + }, + }, + mamoswine: { + learnset: { + amnesia: ["9M"], + ancientpower: ["9M"], + attract: ["9M"], + avalanche: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + curse: ["9M"], + dig: ["9M"], + doublehit: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fissure: ["9M"], + flail: ["9M"], + freezedry: ["9M"], + gigaimpact: ["9M"], + hardpress: ["9M"], + haze: ["9M"], + heavyslam: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + iceshard: ["9M"], + iciclecrash: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + ironhead: ["9M"], + knockoff: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + protect: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + superpower: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + trailblaze: ["9M"], + }, + }, + gallade: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + airslash: ["9M"], + alluringvoice: ["9M"], + aquacutter: ["9M"], + aurasphere: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + confuseray: ["9M"], + dazzlinggleam: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + doubleteam: ["9M"], + drainpunch: ["9M"], + drainingkiss: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + feint: ["9M"], + firepunch: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + healpulse: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + hypnosis: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + knockoff: ["9M"], + leafblade: ["9M"], + lifedew: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + magicroom: ["9M"], + meanlook: ["9M"], + megakick: ["9M"], + memento: ["9M"], + mistyterrain: ["9M"], + mysticalfire: ["9M"], + nightshade: ["9M"], + nightslash: ["9M"], + painsplit: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicterrain: ["9M"], + psychocut: ["9M"], + psyshock: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sacredsword: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowsneak: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarblade: ["9M"], + stoneedge: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + tripleaxel: ["9M"], + upperhand: ["9M"], + vacuumwave: ["9M"], + wideguard: ["9M"], + willowisp: ["9M"], + wonderroom: ["9M"], + xscissor: ["9M"], + zenheadbutt: ["9M"], + }, + }, + froslass: { + learnset: { + auroraveil: ["9M"], + avalanche: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + block: ["9M"], + bodyslam: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + confuseray: ["9M"], + crunch: ["9M"], + curse: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + doubleteam: ["9M"], + drainingkiss: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + fling: ["9M"], + frostbreath: ["9M"], + gigaimpact: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icepunch: ["9M"], + iceshard: ["9M"], + icespinner: ["9M"], + iciclecrash: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + lightscreen: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + phantomforce: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + spikes: ["9M"], + spite: ["9M"], + substitute: ["9M"], + switcheroo: ["9M"], + taunt: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + tripleaxel: ["9M"], + waterpulse: ["9M"], + weatherball: ["9M"], + willowisp: ["9M"], + }, + }, + rotom: { + learnset: { + charge: ["9M"], + chargebeam: ["9M"], + confuseray: ["9M"], + darkpulse: ["9M"], + discharge: ["9M"], + doubleteam: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + endure: ["9M"], + facade: ["9M"], + foulplay: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hypervoice: ["9M"], + lightscreen: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + risingvoltage: ["9M"], + round: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + spite: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trick: ["9M"], + uproar: ["9M"], + voltswitch: ["9M"], + willowisp: ["9M"], + }, + }, + rotomheat: { + learnset: { + overheat: ["9R"], + }, + }, + rotomwash: { + learnset: { + hydropump: ["9R"], + }, + }, + rotomfrost: { + learnset: { + blizzard: ["9R"], + }, + }, + rotomfan: { + learnset: { + airslash: ["9R"], + }, + }, + rotommow: { + learnset: { + leafstorm: ["9R"], + }, + }, + serperior: { + learnset: { + aerialace: ["9M"], + attract: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brutalswing: ["9M"], + bulletseed: ["9M"], + calmmind: ["9M"], + coil: ["9M"], + doubleedge: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + frenzyplant: ["9M"], + gastroacid: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + glare: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + leafblade: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + lightscreen: ["9M"], + meanlook: ["9M"], + mirrorcoat: ["9M"], + outrage: ["9M"], + petalblizzard: ["9M"], + protect: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + sweetscent: ["9M"], + swordsdance: ["9M"], + synthesis: ["9M"], + taunt: ["9M"], + trailblaze: ["9M"], + wrap: ["9M"], + }, + }, + emboar: { + learnset: { + assurance: ["9M"], + blastburn: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + burnup: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gyroball: ["9M"], + hammerarm: ["9M"], + hardpress: ["9M"], + headsmash: ["9M"], + heatcrash: ["9M"], + heatwave: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + mudslap: ["9M"], + overheat: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scald: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + solarblade: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + stormthrow: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + taunt: ["9M"], + temperflare: ["9M"], + thrash: ["9M"], + thunderpunch: ["9M"], + trailblaze: ["9M"], + wildcharge: ["9M"], + willowisp: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + samurott: { + learnset: { + aerialace: ["9M"], + airslash: ["9M"], + aquacutter: ["9M"], + aquajet: ["9M"], + aquatail: ["9M"], + assurance: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + copycat: ["9M"], + detect: ["9M"], + dig: ["9M"], + dive: ["9M"], + drillrun: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + fling: ["9M"], + flipturn: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + hydrocannon: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + liquidation: ["9M"], + megahorn: ["9M"], + nightslash: ["9M"], + protect: ["9M"], + raindance: ["9M"], + razorshell: ["9M"], + rest: ["9M"], + round: ["9M"], + sacredsword: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + sleeptalk: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + soak: ["9M"], + substitute: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + upperhand: ["9M"], + vacuumwave: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + whirlpool: ["9M"], + xscissor: ["9M"], + }, + }, + samurotthisui: { + learnset: { + aerialace: ["9M"], + airslash: ["9M"], + aquacutter: ["9M"], + aquajet: ["9M"], + aquatail: ["9M"], + assurance: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + ceaselessedge: ["9M"], + chillingwater: ["9M"], + copycat: ["9M"], + darkpulse: ["9M"], + detect: ["9M"], + dig: ["9M"], + dive: ["9M"], + drillrun: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + fling: ["9M"], + flipturn: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + hydrocannon: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + liquidation: ["9M"], + megahorn: ["9M"], + nightslash: ["9M"], + protect: ["9M"], + raindance: ["9M"], + razorshell: ["9M"], + rest: ["9M"], + round: ["9M"], + sacredsword: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + sleeptalk: ["9M"], + smartstrike: ["9M"], + snarl: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + soak: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + upperhand: ["9M"], + vacuumwave: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + whirlpool: ["9M"], + xscissor: ["9M"], + }, + }, + watchog: { + learnset: { + afteryou: ["9M"], + assurance: ["9M"], + attract: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + bulletseed: ["9M"], + confuseray: ["9M"], + crunch: ["9M"], + detect: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + endure: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypnosis: ["9M"], + icepunch: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + meanlook: ["9M"], + mudshot: ["9M"], + nastyplot: ["9M"], + protect: ["9M"], + psychup: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + screech: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superfang: ["9M"], + swordsdance: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + zenheadbutt: ["9M"], + }, + }, + liepard: { + learnset: { + assurance: ["9M"], + attract: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + burningjealousy: ["9M"], + charm: ["9M"], + copycat: ["9M"], + covet: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + doubleteam: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + firefang: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icefang: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + nastyplot: ["9M"], + nightslash: ["9M"], + payback: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + psychocut: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + screech: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderfang: ["9M"], + thunderwave: ["9M"], + torment: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + uturn: ["9M"], + yawn: ["9M"], + }, + }, + simisage: { + learnset: { + acrobatics: ["9M"], + attract: ["9M"], + belch: ["9M"], + bite: ["9M"], + brickbreak: ["9M"], + bulletseed: ["9M"], + crunch: ["9M"], + dig: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + gunkshot: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irontail: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + nastyplot: ["9M"], + payback: ["9M"], + protect: ["9M"], + recycle: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + seedbomb: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + solarblade: ["9M"], + stuffcheeks: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + torment: ["9M"], + trailblaze: ["9M"], + uproar: ["9M"], + }, + }, + simisear: { + learnset: { + acrobatics: ["9M"], + amnesia: ["9M"], + attract: ["9M"], + belch: ["9M"], + bite: ["9M"], + blazekick: ["9M"], + brickbreak: ["9M"], + burningjealousy: ["9M"], + crunch: ["9M"], + dig: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irontail: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + nastyplot: ["9M"], + overheat: ["9M"], + payback: ["9M"], + protect: ["9M"], + recycle: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scorchingsands: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stuffcheeks: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + taunt: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + uproar: ["9M"], + willowisp: ["9M"], + yawn: ["9M"], + }, + }, + simipour: { + learnset: { + acrobatics: ["9M"], + aquaring: ["9M"], + attract: ["9M"], + belch: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + brickbreak: ["9M"], + chillingwater: ["9M"], + crunch: ["9M"], + dig: ["9M"], + dive: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + fling: ["9M"], + flipturn: ["9M"], + focusblast: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + irontail: ["9M"], + liquidation: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + nastyplot: ["9M"], + payback: ["9M"], + protect: ["9M"], + raindance: ["9M"], + recycle: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scald: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stuffcheeks: ["9M"], + substitute: ["9M"], + superpower: ["9M"], + surf: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + uproar: ["9M"], + waterfall: ["9M"], + }, + }, + excadrill: { + learnset: { + aerialace: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + crushclaw: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drillrun: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + fissure: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + horndrill: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + megahorn: ["9M"], + metalsound: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + rapidspin: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + smartstrike: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + throatchop: ["9M"], + xscissor: ["9M"], + }, + }, + audino: { + learnset: { + afteryou: ["9M"], + allyswitch: ["9M"], + amnesia: ["9M"], + attract: ["9M"], + babydolleyes: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + chillingwater: ["9M"], + dazzlinggleam: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + drainingkiss: ["9M"], + encore: ["9M"], + endure: ["9M"], + entrainment: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + healpulse: ["9M"], + healingwish: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + irontail: ["9M"], + lastresort: ["9M"], + lifedew: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + mistyterrain: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + simplebeam: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + sweetkiss: ["9M"], + throatchop: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trickroom: ["9M"], + uproar: ["9M"], + wildcharge: ["9M"], + wish: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + conkeldurr: { + learnset: { + attract: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + counter: ["9M"], + curse: ["9M"], + defog: ["9M"], + detect: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + dynamicpunch: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + hammerarm: ["9M"], + hardpress: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + knockoff: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + machpunch: ["9M"], + megakick: ["9M"], + payback: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thunderpunch: ["9M"], + upperhand: ["9M"], + wideguard: ["9M"], + }, + }, + whimsicott: { + learnset: { + attract: ["9M"], + beatup: ["9M"], + charm: ["9M"], + cottonguard: ["9M"], + cottonspore: ["9M"], + dazzlinggleam: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + faketears: ["9M"], + fling: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + helpinghand: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + leechseed: ["9M"], + lightscreen: ["9M"], + memento: ["9M"], + mistyterrain: ["9M"], + moonblast: ["9M"], + playrough: ["9M"], + poisonpowder: ["9M"], + protect: ["9M"], + psychic: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stunspore: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + switcheroo: ["9M"], + tailwind: ["9M"], + taunt: ["9M"], + thief: ["9M"], + tickle: ["9M"], + trickroom: ["9M"], + uturn: ["9M"], + worryseed: ["9M"], + }, + }, + krookodile: { + learnset: { + aerialace: ["9M"], + aquatail: ["9M"], + assurance: ["9M"], + beatup: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + closecombat: ["9M"], + counter: ["9M"], + crunch: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragonclaw: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + fissure: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + focuspunch: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + payback: ["9M"], + powertrip: ["9M"], + protect: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + shadowclaw: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + smackdown: ["9M"], + snarl: ["9M"], + snore: ["9M"], + spite: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + superpower: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + thunderfang: ["9M"], + torment: ["9M"], + uproar: ["9M"], + }, + }, + cofagrigus: { + learnset: { + allyswitch: ["9M"], + attract: ["9M"], + bodypress: ["9M"], + calmmind: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + faketears: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + guardsplit: ["9M"], + guardswap: ["9M"], + haze: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + meanlook: ["9M"], + memento: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + payback: ["9M"], + phantomforce: ["9M"], + poltergeist: ["9M"], + powersplit: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scaryface: ["9M"], + selfdestruct: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowpunch: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + substitute: ["9M"], + thief: ["9M"], + toxicspikes: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + willowisp: ["9M"], + wonderroom: ["9M"], + zenheadbutt: ["9M"], + }, + }, + garbodor: { + learnset: { + acidspray: ["9M"], + amnesia: ["9M"], + ancientpower: ["9M"], + attract: ["9M"], + belch: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + clearsmog: ["9M"], + corrosivegas: ["9M"], + crosspoison: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + drainpunch: ["9M"], + endure: ["9M"], + explosion: ["9M"], + facade: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + haze: ["9M"], + hyperbeam: ["9M"], + mudshot: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + recycle: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + round: ["9M"], + screech: ["9M"], + seedbomb: ["9M"], + selfdestruct: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spikes: ["9M"], + stockpile: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swallow: ["9M"], + thief: ["9M"], + thunderbolt: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + venoshock: ["9M"], + }, + }, + zoroark: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + assurance: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + brickbreak: ["9M"], + burningjealousy: ["9M"], + calmmind: ["9M"], + confuseray: ["9M"], + counter: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + detect: ["9M"], + dig: ["9M"], + encore: ["9M"], + endure: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + imprison: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + memento: ["9M"], + nastyplot: ["9M"], + nightdaze: ["9M"], + nightshade: ["9M"], + nightslash: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + snarl: ["9M"], + snore: ["9M"], + spite: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + torment: ["9M"], + toxic: ["9M"], + trick: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + }, + }, + zoroarkhisui: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + assurance: ["9M"], + bittermalice: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + brickbreak: ["9M"], + burningjealousy: ["9M"], + calmmind: ["9M"], + comeuppance: ["9M"], + confuseray: ["9M"], + crunch: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + detect: ["9M"], + dig: ["9M"], + endure: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + memento: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + phantomforce: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowsneak: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + snarl: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + spite: ["9M"], + substitute: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + torment: ["9M"], + trick: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + willowisp: ["9M"], + }, + }, + reuniclus: { + learnset: { + acidarmor: ["9M"], + allyswitch: ["9M"], + attract: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + confuseray: ["9M"], + drainpunch: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gravity: ["9M"], + guardswap: ["9M"], + gyroball: ["9M"], + hammerarm: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + knockoff: ["9M"], + lightscreen: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + recover: ["9M"], + reflect: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + steelroller: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + wonderroom: ["9M"], + zenheadbutt: ["9M"], + }, + }, + vanilluxe: { + learnset: { + acidarmor: ["9M"], + allyswitch: ["9M"], + attract: ["9M"], + auroraveil: ["9M"], + avalanche: ["9M"], + beatup: ["9M"], + blizzard: ["9M"], + chillingwater: ["9M"], + endure: ["9M"], + explosion: ["9M"], + facade: ["9M"], + flashcannon: ["9M"], + freezedry: ["9M"], + frostbreath: ["9M"], + gigaimpact: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + iceshard: ["9M"], + icespinner: ["9M"], + iciclecrash: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + lightscreen: ["9M"], + magnetrise: ["9M"], + mirrorcoat: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + selfdestruct: ["9M"], + sheercold: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + substitute: ["9M"], + taunt: ["9M"], + uproar: ["9M"], + weatherball: ["9M"], + }, + }, + emolga: { + learnset: { + acrobatics: ["9M"], + agility: ["9M"], + airslash: ["9M"], + attract: ["9M"], + batonpass: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + covet: ["9M"], + defog: ["9M"], + discharge: ["9M"], + doubleteam: ["9M"], + dualwingbeat: ["9M"], + eerieimpulse: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + fling: ["9M"], + helpinghand: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + nuzzle: ["9M"], + pounce: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + risingvoltage: ["9M"], + roost: ["9M"], + round: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + speedswap: ["9M"], + substitute: ["9M"], + taunt: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + tickle: ["9M"], + uturn: ["9M"], + voltswitch: ["9M"], + wildcharge: ["9M"], + }, + }, + chandelure: { + learnset: { + acidarmor: ["9M"], + burningjealousy: ["9M"], + calmmind: ["9M"], + clearsmog: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + doubleteam: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + gigaimpact: ["9M"], + haze: ["9M"], + heatwave: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + inferno: ["9M"], + lashout: ["9M"], + memento: ["9M"], + minimize: ["9M"], + mysticalfire: ["9M"], + nightshade: ["9M"], + overheat: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + poltergeist: ["9M"], + powersplit: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spite: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + taunt: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + willowisp: ["9M"], + }, + }, + beartic: { + learnset: { + aerialace: ["9M"], + aquajet: ["9M"], + assurance: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + closecombat: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + dive: ["9M"], + doubleedge: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + flail: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + frostbreath: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + hardpress: ["9M"], + heavyslam: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icepunch: ["9M"], + iciclecrash: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + liquidation: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + nightslash: ["9M"], + playrough: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + shadowclaw: ["9M"], + sheercold: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swagger: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + trailblaze: ["9M"], + waterpulse: ["9M"], + xscissor: ["9M"], + yawn: ["9M"], + }, + }, + stunfisk: { + learnset: { + attract: ["9M"], + bounce: ["9M"], + bulldoze: ["9M"], + charge: ["9M"], + curse: ["9M"], + dig: ["9M"], + discharge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroweb: ["9M"], + endure: ["9M"], + facade: ["9M"], + fissure: ["9M"], + flail: ["9M"], + foulplay: ["9M"], + lashout: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + muddywater: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + protect: ["9M"], + raindance: ["9M"], + reflecttype: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scald: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snore: ["9M"], + spite: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + surf: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + uproar: ["9M"], + yawn: ["9M"], + }, + }, + stunfiskgalar: { + learnset: { + attract: ["9M"], + bind: ["9M"], + bounce: ["9M"], + bulldoze: ["9M"], + counter: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + fissure: ["9M"], + flail: ["9M"], + flashcannon: ["9M"], + foulplay: ["9M"], + icefang: ["9M"], + irondefense: ["9M"], + lashout: ["9M"], + metalsound: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + muddywater: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + protect: ["9M"], + raindance: ["9M"], + reflecttype: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scald: ["9M"], + screech: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snaptrap: ["9M"], + snore: ["9M"], + spite: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + surf: ["9M"], + terrainpulse: ["9M"], + thunderwave: ["9M"], + uproar: ["9M"], + yawn: ["9M"], + }, + }, + golurk: { + learnset: { + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + chargebeam: ["9M"], + closecombat: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + dynamicpunch: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + fly: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gravity: ["9M"], + gyroball: ["9M"], + hammerarm: ["9M"], + hardpress: ["9M"], + headlongrush: ["9M"], + heatcrash: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + knockoff: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + mudslap: ["9M"], + nightshade: ["9M"], + phantomforce: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scorchingsands: ["9M"], + selfdestruct: ["9M"], + shadowball: ["9M"], + shadowpunch: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + thief: ["9M"], + thunderpunch: ["9M"], + thunderbolt: ["9M"], + trick: ["9M"], + zenheadbutt: ["9M"], + }, + }, + hydreigon: { + learnset: { + acrobatics: ["9M"], + assurance: ["9M"], + beatup: ["9M"], + belch: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + doublehit: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dragontail: ["9M"], + dualwingbeat: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firespin: ["9M"], + flamethrower: ["9M"], + flashcannon: ["9M"], + fly: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + headsmash: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icefang: ["9M"], + irontail: ["9M"], + lashout: ["9M"], + nastyplot: ["9M"], + outrage: ["9M"], + payback: ["9M"], + protect: ["9M"], + psychup: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + spite: ["9M"], + stealthrock: ["9M"], + steelwing: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + surf: ["9M"], + tailwind: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderfang: ["9M"], + thunderwave: ["9M"], + triattack: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + zenheadbutt: ["9M"], + }, + }, + volcarona: { + learnset: { + acrobatics: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + amnesia: ["9M"], + bodyslam: ["9M"], + bugbite: ["9M"], + bugbuzz: ["9M"], + calmmind: ["9M"], + doubleedge: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + facade: ["9M"], + fierydance: ["9M"], + fireblast: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + fly: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + heatwave: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + leechlife: ["9M"], + lightscreen: ["9M"], + lunge: ["9M"], + morningsun: ["9M"], + mysticalfire: ["9M"], + overheat: ["9M"], + poisonjab: ["9M"], + pounce: ["9M"], + protect: ["9M"], + psychic: ["9M"], + quiverdance: ["9M"], + ragepowder: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + screech: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stringshot: ["9M"], + strugglebug: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + tailwind: ["9M"], + thrash: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + whirlwind: ["9M"], + wildcharge: ["9M"], + willowisp: ["9M"], + zenheadbutt: ["9M"], + }, + }, + chesnaught: { + learnset: { + aerialace: ["9M"], + bellydrum: ["9M"], + bite: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + bulletseed: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dragonclaw: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + feint: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + frenzyplant: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + gyroball: ["9M"], + hammerarm: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + pinmissile: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spikes: ["9M"], + spikyshield: ["9M"], + steelroller: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superfang: ["9M"], + superpower: ["9M"], + swordsdance: ["9M"], + synthesis: ["9M"], + taunt: ["9M"], + thunderpunch: ["9M"], + trailblaze: ["9M"], + wideguard: ["9M"], + woodhammer: ["9M"], + zenheadbutt: ["9M"], + }, + }, + delphox: { + learnset: { + agility: ["9M"], + blastburn: ["9M"], + burningjealousy: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + confuseray: ["9M"], + copycat: ["9M"], + dazzlinggleam: ["9M"], + doubleteam: ["9M"], + encore: ["9M"], + endure: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + focusblast: ["9M"], + foulplay: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + howl: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + hypnosis: ["9M"], + imprison: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + magicroom: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + mysticalfire: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + overheat: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roleplay: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scorchingsands: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + switcheroo: ["9M"], + thief: ["9M"], + thunderpunch: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + willowisp: ["9M"], + wish: ["9M"], + wonderroom: ["9M"], + zenheadbutt: ["9M"], + }, + }, + greninja: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + blizzard: ["9M"], + bounce: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + chillingwater: ["9M"], + counter: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + dive: ["9M"], + doubleteam: ["9M"], + endure: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + fling: ["9M"], + flipturn: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hydrocannon: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + liquidation: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + nightslash: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + roleplay: ["9M"], + round: ["9M"], + shadowsneak: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgewave: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + spikes: ["9M"], + substitute: ["9M"], + surf: ["9M"], + switcheroo: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + toxicspikes: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + upperhand: ["9M"], + waterpulse: ["9M"], + watershuriken: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + }, + }, + diggersby: { + learnset: { + agility: ["9M"], + attract: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + dig: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + fissure: ["9M"], + flail: ["9M"], + fling: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + hammerarm: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + payback: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scorchingsands: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + snore: ["9M"], + spikes: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + superfang: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + thief: ["9M"], + thunderpunch: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + wildcharge: ["9M"], + }, + }, + talonflame: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + blazekick: ["9M"], + bravebird: ["9M"], + bulkup: ["9M"], + defog: ["9M"], + doubleedge: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + feint: ["9M"], + fireblast: ["9M"], + firespin: ["9M"], + flail: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + fly: ["9M"], + gigaimpact: ["9M"], + heatwave: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + overheat: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roost: ["9M"], + round: ["9M"], + skyattack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + tailwind: ["9M"], + taunt: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + uturn: ["9M"], + upperhand: ["9M"], + whirlwind: ["9M"], + willowisp: ["9M"], + }, + }, + vivillon: { + learnset: { + acrobatics: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + bugbite: ["9M"], + bugbuzz: ["9M"], + calmmind: ["9M"], + confuseray: ["9M"], + drainingkiss: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + lightscreen: ["9M"], + poisonpowder: ["9M"], + pollenpuff: ["9M"], + pounce: ["9M"], + protect: ["9M"], + psychic: ["9M"], + quiverdance: ["9M"], + ragepowder: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + skittersmack: ["9M"], + sleeppowder: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stringshot: ["9M"], + strugglebug: ["9M"], + stunspore: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + tailwind: ["9M"], + thief: ["9M"], + uturn: ["9M"], + weatherball: ["9M"], + whirlwind: ["9M"], + }, + }, + vivillonfancy: {}, + vivillonpokeball: {}, + floetteeternal: { + learnset: { + alluringvoice: ["9M"], + batonpass: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + copycat: ["9M"], + dazzlinggleam: ["9M"], + drainingkiss: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + gigadrain: ["9M"], + grassknot: ["9M"], + grassyterrain: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + lightofruin: ["9M"], + lightscreen: ["9M"], + mistyterrain: ["9M"], + moonblast: ["9M"], + petalblizzard: ["9M"], + petaldance: ["9M"], + pollenpuff: ["9M"], + protect: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + rest: ["9M"], + safeguard: ["9M"], + seedbomb: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + solarbeam: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + synthesis: ["9M"], + tearfullook: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + wish: ["9M"], + }, + }, + florges: { + learnset: { + alluringvoice: ["9M"], + batonpass: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + copycat: ["9M"], + dazzlinggleam: ["9M"], + drainingkiss: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + lightscreen: ["9M"], + mistyexplosion: ["9M"], + mistyterrain: ["9M"], + moonblast: ["9M"], + petalblizzard: ["9M"], + petaldance: ["9M"], + pollenpuff: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + seedbomb: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + synthesis: ["9M"], + tearfullook: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + wish: ["9M"], + }, + }, + pangoro: { + learnset: { + attract: ["9M"], + beatup: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + bulletpunch: ["9M"], + circlethrow: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + comeuppance: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + darkestlariat: ["9M"], + detect: ["9M"], + dig: ["9M"], + dragonclaw: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + entrainment: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + hammerarm: ["9M"], + headlongrush: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icepunch: ["9M"], + ironhead: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + nightslash: ["9M"], + outrage: ["9M"], + partingshot: ["9M"], + payback: ["9M"], + poisonjab: ["9M"], + powertrip: ["9M"], + protect: ["9M"], + quash: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + seismictoss: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + snarl: ["9M"], + snore: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + stormthrow: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + uproar: ["9M"], + xscissor: ["9M"], + zenheadbutt: ["9M"], + }, + }, + furfrou: { + learnset: { + attract: ["9M"], + babydolleyes: ["9M"], + bite: ["9M"], + charm: ["9M"], + cottonguard: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + hypervoice: ["9M"], + icefang: ["9M"], + irontail: ["9M"], + lastresort: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + thunderfang: ["9M"], + thunderwave: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + wildcharge: ["9M"], + zenheadbutt: ["9M"], + }, + }, + meowstic: { + learnset: { + alluringvoice: ["9M"], + batonpass: ["9M"], + calmmind: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + covet: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + gigaimpact: ["9M"], + gravity: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + meanlook: ["9M"], + mistyterrain: ["9M"], + nastyplot: ["9M"], + payback: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psychup: ["9M"], + psyshock: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roleplay: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + tailslap: ["9M"], + thunderbolt: ["9M"], + thunderwave: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + wish: ["9M"], + wonderroom: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + meowsticf: { + learnset: { + alluringvoice: ["9M"], + batonpass: ["9M"], + calmmind: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + covet: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + gravity: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + nastyplot: ["9M"], + payback: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psychup: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roleplay: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + tailslap: ["9M"], + thunderbolt: ["9M"], + thunderwave: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + wonderroom: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + aegislash: { + learnset: { + aerialace: ["9M"], + airslash: ["9M"], + attract: ["9M"], + block: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + closecombat: ["9M"], + destinybond: ["9M"], + doublehit: ["9M"], + endure: ["9M"], + facade: ["9M"], + flashcannon: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + headsmash: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + kingsshield: ["9M"], + metalsound: ["9M"], + nightslash: ["9M"], + poltergeist: ["9M"], + powertrick: ["9M"], + protect: ["9M"], + psychocut: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + round: ["9M"], + sacredsword: ["9M"], + screech: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowsneak: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarblade: ["9M"], + steelbeam: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + wideguard: ["9M"], + zenheadbutt: ["9M"], + }, + }, + aromatisse: { + learnset: { + afteryou: ["9M"], + alluringvoice: ["9M"], + allyswitch: ["9M"], + aromaticmist: ["9M"], + attract: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + dazzlinggleam: ["9M"], + disable: ["9M"], + drainpunch: ["9M"], + drainingkiss: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + flashcannon: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + healpulse: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypnosis: ["9M"], + lightscreen: ["9M"], + mistyexplosion: ["9M"], + mistyterrain: ["9M"], + moonblast: ["9M"], + nastyplot: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + sweetkiss: ["9M"], + sweetscent: ["9M"], + thunder: ["9M"], + thunderbolt: ["9M"], + trickroom: ["9M"], + wish: ["9M"], + }, + }, + slurpuff: { + learnset: { + afteryou: ["9M"], + amnesia: ["9M"], + attract: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + copycat: ["9M"], + cottonguard: ["9M"], + cottonspore: ["9M"], + dazzlinggleam: ["9M"], + drainpunch: ["9M"], + drainingkiss: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flamethrower: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + lightscreen: ["9M"], + mistyexplosion: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stickyweb: ["9M"], + stringshot: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + sweetscent: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderbolt: ["9M"], + wish: ["9M"], + yawn: ["9M"], + }, + }, + clawitzer: { + learnset: { + aquajet: ["9M"], + aquatail: ["9M"], + aurasphere: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + chillingwater: ["9M"], + crabhammer: ["9M"], + darkpulse: ["9M"], + dive: ["9M"], + dragonpulse: ["9M"], + endure: ["9M"], + entrainment: ["9M"], + facade: ["9M"], + flail: ["9M"], + flashcannon: ["9M"], + flipturn: ["9M"], + focusblast: ["9M"], + gigaimpact: ["9M"], + healpulse: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + liquidation: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + muddywater: ["9M"], + pounce: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + round: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + substitute: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + terrainpulse: ["9M"], + thief: ["9M"], + uturn: ["9M"], + venoshock: ["9M"], + waterfall: ["9M"], + waterpulse: ["9M"], + weatherball: ["9M"], + }, + }, + heliolisk: { + learnset: { + agility: ["9M"], + allyswitch: ["9M"], + attract: ["9M"], + breakingswipe: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + discharge: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dragontail: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electrify: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + endure: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + focusblast: ["9M"], + gigaimpact: ["9M"], + glare: ["9M"], + grassknot: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + morningsun: ["9M"], + mudslap: ["9M"], + paraboliccharge: ["9M"], + pounce: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + rest: ["9M"], + risingvoltage: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaleshot: ["9M"], + shedtail: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + voltswitch: ["9M"], + weatherball: ["9M"], + wildcharge: ["9M"], + }, + }, + tyrantrum: { + learnset: { + ancientpower: ["9M"], + assurance: ["9M"], + attract: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + closecombat: ["9M"], + crunch: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + gigaimpact: ["9M"], + headsmash: ["9M"], + highhorsepower: ["9M"], + horndrill: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icefang: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lashout: ["9M"], + meteorbeam: ["9M"], + outrage: ["9M"], + playrough: ["9M"], + poisonfang: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockpolish: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + thrash: ["9M"], + thunderfang: ["9M"], + zenheadbutt: ["9M"], + }, + }, + aurorus: { + learnset: { + ancientpower: ["9M"], + attract: ["9M"], + auroraveil: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + chillingwater: ["9M"], + darkpulse: ["9M"], + discharge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + flashcannon: ["9M"], + freezedry: ["9M"], + gigaimpact: ["9M"], + haze: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icespinner: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + meteorbeam: ["9M"], + mirrorcoat: ["9M"], + mudshot: ["9M"], + outrage: ["9M"], + protect: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + safeguard: ["9M"], + sandstorm: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + stealthrock: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + weatherball: ["9M"], + zenheadbutt: ["9M"], + }, + }, + sylveon: { + learnset: { + alluringvoice: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + copycat: ["9M"], + covet: ["9M"], + curse: ["9M"], + dazzlinggleam: ["9M"], + detect: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + drainingkiss: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + flail: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + lastresort: ["9M"], + lightscreen: ["9M"], + mistyexplosion: ["9M"], + mistyterrain: ["9M"], + moonblast: ["9M"], + mudslap: ["9M"], + mysticalfire: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psyshock: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + tickle: ["9M"], + trailblaze: ["9M"], + weatherball: ["9M"], + wish: ["9M"], + yawn: ["9M"], + }, + }, + hawlucha: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + airslash: ["9M"], + assurance: ["9M"], + batonpass: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bounce: ["9M"], + bravebird: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + crosschop: ["9M"], + defog: ["9M"], + detect: ["9M"], + dig: ["9M"], + drainpunch: ["9M"], + dualwingbeat: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + entrainment: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + feint: ["9M"], + firepunch: ["9M"], + fling: ["9M"], + fly: ["9M"], + flyingpress: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + highjumpkick: ["9M"], + hyperbeam: ["9M"], + ironhead: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + lunge: ["9M"], + meanlook: ["9M"], + megakick: ["9M"], + payback: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + roost: ["9M"], + round: ["9M"], + skyattack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + steelwing: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + upperhand: ["9M"], + uproar: ["9M"], + xscissor: ["9M"], + zenheadbutt: ["9M"], + }, + }, + dedenne: { + learnset: { + agility: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + charm: ["9M"], + covet: ["9M"], + dazzlinggleam: ["9M"], + dig: ["9M"], + discharge: ["9M"], + drainingkiss: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + entrainment: ["9M"], + facade: ["9M"], + fling: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irontail: ["9M"], + lightscreen: ["9M"], + magnetrise: ["9M"], + mistyterrain: ["9M"], + nuzzle: ["9M"], + paraboliccharge: ["9M"], + playrough: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + risingvoltage: ["9M"], + round: ["9M"], + seedbomb: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superfang: ["9M"], + tearfullook: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + voltswitch: ["9M"], + wildcharge: ["9M"], + }, + }, + goodra: { + learnset: { + acidarmor: ["9M"], + acidspray: ["9M"], + aquatail: ["9M"], + assurance: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + counter: ["9M"], + curse: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + feint: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + flail: ["9M"], + flamethrower: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lifedew: ["9M"], + megakick: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + outrage: ["9M"], + powerwhip: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + round: ["9M"], + scald: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snore: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + surf: ["9M"], + tearfullook: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderbolt: ["9M"], + toxic: ["9M"], + waterpulse: ["9M"], + weatherball: ["9M"], + }, + }, + goodrahisui: { + learnset: { + acidspray: ["9M"], + ancientpower: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + counter: ["9M"], + curse: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + feint: ["9M"], + fireblast: ["9M"], + firepunch: ["9M"], + flail: ["9M"], + flamethrower: ["9M"], + flashcannon: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + heavyslam: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icespinner: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lifedew: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + outrage: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + shelter: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + steelbeam: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + tearfullook: ["9M"], + thunder: ["9M"], + thunderpunch: ["9M"], + thunderbolt: ["9M"], + waterpulse: ["9M"], + weatherball: ["9M"], + }, + }, + klefki: { + learnset: { + calmmind: ["9M"], + dazzlinggleam: ["9M"], + drainingkiss: ["9M"], + endure: ["9M"], + facade: ["9M"], + fairylock: ["9M"], + flashcannon: ["9M"], + foulplay: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + lastresort: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + magnetrise: ["9M"], + metalsound: ["9M"], + mistyterrain: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + recycle: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + sandstorm: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + spikes: ["9M"], + steelbeam: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + switcheroo: ["9M"], + thief: ["9M"], + thunderwave: ["9M"], + torment: ["9M"], + trickroom: ["9M"], + }, + }, + trevenant: { + learnset: { + allyswitch: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + burningjealousy: ["9M"], + calmmind: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + destinybond: ["9M"], + dig: ["9M"], + disable: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + focusblast: ["9M"], + forestscurse: ["9M"], + foulplay: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + haze: ["9M"], + hex: ["9M"], + hornleech: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + ingrain: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + phantomforce: ["9M"], + poisonjab: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowpunch: ["9M"], + skillswap: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + spite: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + thief: ["9M"], + toxic: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + willowisp: ["9M"], + woodhammer: ["9M"], + xscissor: ["9M"], + }, + }, + gourgeist: { + learnset: { + allyswitch: ["9M"], + attract: ["9M"], + brutalswing: ["9M"], + bulletseed: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + endure: ["9M"], + energyball: ["9M"], + explosion: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + flamethrower: ["9M"], + focusblast: ["9M"], + foulplay: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + gyroball: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + hypnosis: ["9M"], + imprison: ["9M"], + leechseed: ["9M"], + lightscreen: ["9M"], + moonblast: ["9M"], + mysticalfire: ["9M"], + nastyplot: ["9M"], + painsplit: ["9M"], + phantomforce: ["9M"], + poltergeist: ["9M"], + powerwhip: ["9M"], + protect: ["9M"], + psychic: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + selfdestruct: ["9M"], + shadowball: ["9M"], + shadowsneak: ["9M"], + skillswap: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + thief: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + trickortreat: ["9M"], + willowisp: ["9M"], + worryseed: ["9M"], + }, + }, + gourgeistsuper: {}, + avalugg: { + learnset: { + auroraveil: ["9M"], + avalanche: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + crunch: ["9M"], + curse: ["9M"], + doubleedge: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + flashcannon: ["9M"], + frostbreath: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + heavyslam: ["9M"], + highhorsepower: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icespinner: ["9M"], + iciclecrash: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + mirrorcoat: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rapidspin: ["9M"], + recover: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + superpower: ["9M"], + surf: ["9M"], + wideguard: ["9M"], + }, + }, + avalugghisui: { + learnset: { + ancientpower: ["9M"], + auroraveil: ["9M"], + avalanche: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + hardpress: ["9M"], + heavyslam: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icespinner: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + meteorbeam: ["9M"], + mirrorcoat: ["9M"], + mountaingale: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rapidspin: ["9M"], + recover: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + snowscape: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + wideguard: ["9M"], + }, + }, + noivern: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + boomburst: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + darkpulse: ["9M"], + defog: ["9M"], + doubleteam: ["9M"], + doubleedge: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dragontail: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + facade: ["9M"], + flamethrower: ["9M"], + fly: ["9M"], + focusblast: ["9M"], + gigaimpact: ["9M"], + heatwave: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + irontail: ["9M"], + leechlife: ["9M"], + moonlight: ["9M"], + outrage: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + rest: ["9M"], + roost: ["9M"], + round: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + skyattack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superfang: ["9M"], + switcheroo: ["9M"], + tailwind: ["9M"], + taunt: ["9M"], + thief: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + whirlwind: ["9M"], + wildcharge: ["9M"], + xscissor: ["9M"], + }, + }, + decidueye: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + batonpass: ["9M"], + bravebird: ["9M"], + bulletseed: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + defog: ["9M"], + doubleteam: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + frenzyplant: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + knockoff: ["9M"], + leafblade: ["9M"], + leafstorm: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + phantomforce: ["9M"], + pluck: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + psychocut: ["9M"], + raindance: ["9M"], + rest: ["9M"], + roost: ["9M"], + round: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowsneak: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + solarblade: ["9M"], + spiritshackle: ["9M"], + spite: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + synthesis: ["9M"], + tailwind: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + }, + }, + decidueyehisui: { + learnset: { + aerialace: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + aurasphere: ["9M"], + batonpass: ["9M"], + bravebird: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulletseed: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + confuseray: ["9M"], + defog: ["9M"], + doubleteam: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + frenzyplant: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + knockoff: ["9M"], + leafblade: ["9M"], + leafstorm: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + pluck: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rocktomb: ["9M"], + roost: ["9M"], + round: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + shadowclaw: ["9M"], + shadowsneak: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + synthesis: ["9M"], + tailwind: ["9M"], + taunt: ["9M"], + trailblaze: ["9M"], + triplearrows: ["9M"], + uturn: ["9M"], + upperhand: ["9M"], + }, + }, + incineroar: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + assurance: ["9M"], + attract: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + blastburn: ["9M"], + blazekick: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + burningjealousy: ["9M"], + closecombat: ["9M"], + crosschop: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + darkestlariat: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firepunch: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + heatcrash: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + ironhead: ["9M"], + lashout: ["9M"], + leechlife: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + nastyplot: ["9M"], + outrage: ["9M"], + overheat: ["9M"], + partingshot: ["9M"], + powertrip: ["9M"], + protect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + round: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + swagger: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + trailblaze: ["9M"], + willowisp: ["9M"], + }, + }, + primarina: { + learnset: { + acrobatics: ["9M"], + alluringvoice: ["9M"], + amnesia: ["9M"], + aquajet: ["9M"], + aquaring: ["9M"], + attract: ["9M"], + babydolleyes: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + dazzlinggleam: ["9M"], + dive: ["9M"], + drainingkiss: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + flipturn: ["9M"], + gigaimpact: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hydrocannon: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icespinner: ["9M"], + icywind: ["9M"], + irontail: ["9M"], + lifedew: ["9M"], + lightscreen: ["9M"], + liquidation: ["9M"], + mistyexplosion: ["9M"], + mistyterrain: ["9M"], + moonblast: ["9M"], + perishsong: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + shadowball: ["9M"], + sing: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + sparklingaria: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + surf: ["9M"], + tripleaxel: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + weatherball: ["9M"], + whirlpool: ["9M"], + wonderroom: ["9M"], + }, + }, + toucannon: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + attract: ["9M"], + beakblast: ["9M"], + boomburst: ["9M"], + bravebird: ["9M"], + brickbreak: ["9M"], + bulletseed: ["9M"], + drillpeck: ["9M"], + dualwingbeat: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + flamecharge: ["9M"], + flashcannon: ["9M"], + fly: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + knockoff: ["9M"], + overheat: ["9M"], + pluck: ["9M"], + protect: ["9M"], + psychup: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + roost: ["9M"], + round: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + seedbomb: ["9M"], + skyattack: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + tailwind: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + }, + }, + crabominable: { + learnset: { + amnesia: ["9M"], + avalanche: ["9M"], + blizzard: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + crabhammer: ["9M"], + dig: ["9M"], + drainpunch: ["9M"], + dynamicpunch: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + hardpress: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icehammer: ["9M"], + icepunch: ["9M"], + icespinner: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + knockoff: ["9M"], + liquidation: ["9M"], + machpunch: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + payback: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + swagger: ["9M"], + thief: ["9M"], + thunderpunch: ["9M"], + upperhand: ["9M"], + wideguard: ["9M"], + zenheadbutt: ["9M"], + }, + }, + lycanroc: { + learnset: { + accelerock: ["9M"], + agility: ["9M"], + assurance: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + closecombat: ["9M"], + crunch: ["9M"], + dig: ["9M"], + doubleteam: ["9M"], + doubleedge: ["9M"], + drillrun: ["9M"], + earthpower: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + howl: ["9M"], + hypervoice: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lastresort: ["9M"], + mudslap: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + quickattack: ["9M"], + quickguard: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + tailslap: ["9M"], + taunt: ["9M"], + thrash: ["9M"], + thunderfang: ["9M"], + trailblaze: ["9M"], + zenheadbutt: ["9M"], + }, + }, + lycanrocmidnight: { + learnset: { + bite: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + closecombat: ["9M"], + counter: ["9M"], + crunch: ["9M"], + dig: ["9M"], + doubleteam: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + firepunch: ["9M"], + fling: ["9M"], + focuspunch: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + howl: ["9M"], + hypervoice: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + lastresort: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + payback: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + thunderfang: ["9M"], + thunderpunch: ["9M"], + trailblaze: ["9M"], + upperhand: ["9M"], + uproar: ["9M"], + zenheadbutt: ["9M"], + }, + }, + lycanrocdusk: { + learnset: { + accelerock: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + charm: ["9M"], + closecombat: ["9M"], + counter: ["9M"], + crunch: ["9M"], + crushclaw: ["9M"], + dig: ["9M"], + doubleteam: ["9M"], + doubleedge: ["9M"], + drillrun: ["9M"], + earthpower: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + howl: ["9M"], + hypervoice: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lastresort: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + quickattack: ["9M"], + quickguard: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + swordsdance: ["9M"], + tailslap: ["9M"], + taunt: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + thunderfang: ["9M"], + trailblaze: ["9M"], + zenheadbutt: ["9M"], + }, + }, + toxapex: { + learnset: { + acidspray: ["9M"], + banefulbunker: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + chillingwater: ["9M"], + crosspoison: ["9M"], + endure: ["9M"], + facade: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + haze: ["9M"], + hex: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icespinner: ["9M"], + icywind: ["9M"], + infestation: ["9M"], + irondefense: ["9M"], + lightscreen: ["9M"], + liquidation: ["9M"], + lunge: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + pinmissile: ["9M"], + poisonjab: ["9M"], + pounce: ["9M"], + protect: ["9M"], + raindance: ["9M"], + recover: ["9M"], + rest: ["9M"], + round: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + spitup: ["9M"], + stockpile: ["9M"], + substitute: ["9M"], + surf: ["9M"], + swallow: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + venoshock: ["9M"], + waterpulse: ["9M"], + wideguard: ["9M"], + }, + }, + mudsdale: { + learnset: { + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + closecombat: ["9M"], + counter: ["9M"], + curse: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fissure: ["9M"], + focusblast: ["9M"], + gigaimpact: ["9M"], + heavyslam: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + payback: ["9M"], + protect: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + }, + }, + araquanid: { + learnset: { + aquaring: ["9M"], + attract: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + bugbite: ["9M"], + bugbuzz: ["9M"], + chillingwater: ["9M"], + crunch: ["9M"], + dive: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + entrainment: ["9M"], + facade: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + infestation: ["9M"], + irondefense: ["9M"], + leechlife: ["9M"], + liquidation: ["9M"], + lunge: ["9M"], + magicroom: ["9M"], + mirrorcoat: ["9M"], + poisonjab: ["9M"], + pounce: ["9M"], + powersplit: ["9M"], + protect: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + scaryface: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + soak: ["9M"], + spitup: ["9M"], + stickyweb: ["9M"], + stockpile: ["9M"], + substitute: ["9M"], + surf: ["9M"], + trailblaze: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + wideguard: ["9M"], + wonderroom: ["9M"], + xscissor: ["9M"], + }, + }, + salazzle: { + learnset: { + acidspray: ["9M"], + acrobatics: ["9M"], + agility: ["9M"], + beatup: ["9M"], + belch: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + burningjealousy: ["9M"], + corrosivegas: ["9M"], + crosspoison: ["9M"], + disable: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firelash: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + fling: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + leechlife: ["9M"], + mudslap: ["9M"], + nastyplot: ["9M"], + overheat: ["9M"], + payback: ["9M"], + poisonfang: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + rest: ["9M"], + round: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + shadowclaw: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + snore: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + sweetscent: ["9M"], + taunt: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + thunderwave: ["9M"], + torment: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + trailblaze: ["9M"], + venoshock: ["9M"], + willowisp: ["9M"], + }, + }, + tsareena: { + learnset: { + acrobatics: ["9M"], + acupressure: ["9M"], + aromaticmist: ["9M"], + bounce: ["9M"], + bulletseed: ["9M"], + charm: ["9M"], + dazzlinggleam: ["9M"], + drainingkiss: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + flail: ["9M"], + fling: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + helpinghand: ["9M"], + highjumpkick: ["9M"], + hyperbeam: ["9M"], + knockoff: ["9M"], + leafstorm: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + payback: ["9M"], + petalblizzard: ["9M"], + playrough: ["9M"], + powerwhip: ["9M"], + protect: ["9M"], + rapidspin: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + seedbomb: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + solarblade: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + sweetscent: ["9M"], + synthesis: ["9M"], + taunt: ["9M"], + teeterdance: ["9M"], + trailblaze: ["9M"], + tripleaxel: ["9M"], + tropkick: ["9M"], + uturn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + oranguru: { + learnset: { + afteryou: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + chargebeam: ["9M"], + chillingwater: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + foulplay: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + gravity: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + imprison: ["9M"], + instruct: ["9M"], + knockoff: ["9M"], + lastresort: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + megakick: ["9M"], + nastyplot: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + quash: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + taunt: ["9M"], + terrainpulse: ["9M"], + thunder: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + wonderroom: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + passimian: { + learnset: { + acrobatics: ["9M"], + assurance: ["9M"], + batonpass: ["9M"], + beatup: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + chillingwater: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + counter: ["9M"], + curse: ["9M"], + doubleedge: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + electroweb: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + feint: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + gyroball: ["9M"], + hyperbeam: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + knockoff: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + seismictoss: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snore: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thrash: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + upperhand: ["9M"], + uproar: ["9M"], + vacuumwave: ["9M"], + }, + }, + mimikyu: { + learnset: { + babydolleyes: ["9M"], + beatup: ["9M"], + bulkup: ["9M"], + burningjealousy: ["9M"], + charm: ["9M"], + confuseray: ["9M"], + copycat: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + dazzlinggleam: ["9M"], + destinybond: ["9M"], + doubleteam: ["9M"], + drainpunch: ["9M"], + drainingkiss: ["9M"], + endure: ["9M"], + facade: ["9M"], + fling: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + leechlife: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + mistyterrain: ["9M"], + nightshade: ["9M"], + nightslash: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + phantomforce: ["9M"], + playrough: ["9M"], + pounce: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + raindance: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + screech: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowsneak: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + spite: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + willowisp: ["9M"], + woodhammer: ["9M"], + xscissor: ["9M"], + }, + }, + drampa: { + learnset: { + amnesia: ["9M"], + attract: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + energyball: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + flamethrower: ["9M"], + fling: ["9M"], + fly: ["9M"], + focusblast: ["9M"], + gigaimpact: ["9M"], + glare: ["9M"], + grassknot: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hurricane: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icywind: ["9M"], + lashout: ["9M"], + lightscreen: ["9M"], + outrage: ["9M"], + playrough: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + roost: ["9M"], + round: ["9M"], + safeguard: ["9M"], + scaleshot: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + steelwing: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + surf: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + tickle: ["9M"], + triattack: ["9M"], + uproar: ["9M"], + whirlwind: ["9M"], + }, + }, + kommoo: { + learnset: { + aerialace: ["9M"], + attract: ["9M"], + aurasphere: ["9M"], + bellydrum: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + boomburst: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulkup: ["9M"], + bulldoze: ["9M"], + clangingscales: ["9M"], + clangoroussoul: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + counter: ["9M"], + doubleedge: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + drainpunch: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + flamethrower: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icepunch: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + lowkick: ["9M"], + megakick: ["9M"], + metalsound: ["9M"], + nobleroar: ["9M"], + outrage: ["9M"], + payback: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandstorm: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + upperhand: ["9M"], + uproar: ["9M"], + vacuumwave: ["9M"], + xscissor: ["9M"], + }, + }, + corviknight: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + assurance: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bravebird: ["9M"], + bulkup: ["9M"], + curse: ["9M"], + defog: ["9M"], + doubleedge: ["9M"], + drillpeck: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + featherdance: ["9M"], + flashcannon: ["9M"], + fly: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + heavyslam: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + lightscreen: ["9M"], + metalsound: ["9M"], + nastyplot: ["9M"], + payback: ["9M"], + pluck: ["9M"], + powertrip: ["9M"], + protect: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roost: ["9M"], + round: ["9M"], + scaryface: ["9M"], + screech: ["9M"], + skyattack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + spite: ["9M"], + steelbeam: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + tailwind: ["9M"], + taunt: ["9M"], + thief: ["9M"], + uturn: ["9M"], + }, + }, + flapple: { + learnset: { + acidspray: ["9M"], + acrobatics: ["9M"], + aerialace: ["9M"], + airslash: ["9M"], + bulletseed: ["9M"], + dracometeor: ["9M"], + dragondance: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dualwingbeat: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + fly: ["9M"], + focusenergy: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + gravapple: ["9M"], + growth: ["9M"], + heavyslam: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + outrage: ["9M"], + pounce: ["9M"], + protect: ["9M"], + recycle: ["9M"], + rest: ["9M"], + round: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + }, + }, + appletun: { + learnset: { + amnesia: ["9M"], + appleacid: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + bulletseed: ["9M"], + curse: ["9M"], + dracometeor: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + gyroball: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + lightscreen: ["9M"], + outrage: ["9M"], + pounce: ["9M"], + protect: ["9M"], + raindance: ["9M"], + recover: ["9M"], + recycle: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + seedbomb: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + superpower: ["9M"], + sweetscent: ["9M"], + trailblaze: ["9M"], + zenheadbutt: ["9M"], + }, + }, + sandaconda: { + learnset: { + belch: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + coil: ["9M"], + dig: ["9M"], + dragonrush: ["9M"], + drillrun: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + firefang: ["9M"], + gigaimpact: ["9M"], + glare: ["9M"], + highhorsepower: ["9M"], + hurricane: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + lastresort: ["9M"], + minimize: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + outrage: ["9M"], + protect: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + screech: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + thunderfang: ["9M"], + wrap: ["9M"], + zenheadbutt: ["9M"], + }, + }, + polteageist: { + learnset: { + allyswitch: ["9M"], + aromaticmist: ["9M"], + batonpass: ["9M"], + calmmind: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + endure: ["9M"], + facade: ["9M"], + foulplay: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + lightscreen: ["9M"], + memento: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + payback: ["9M"], + phantomforce: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psyshock: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + selfdestruct: ["9M"], + shadowball: ["9M"], + shellsmash: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + spite: ["9M"], + storedpower: ["9M"], + strengthsap: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sweetscent: ["9M"], + teatime: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + willowisp: ["9M"], + wonderroom: ["9M"], + }, + }, + polteageistantique: {}, + hatterene: { + learnset: { + afteryou: ["9M"], + agility: ["9M"], + aromaticmist: ["9M"], + batonpass: ["9M"], + brutalswing: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + darkpulse: ["9M"], + dazzlinggleam: ["9M"], + drainingkiss: ["9M"], + endure: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + futuresight: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + gravity: ["9M"], + guardswap: ["9M"], + healpulse: ["9M"], + healingwish: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + lifedew: ["9M"], + lightscreen: ["9M"], + magicpowder: ["9M"], + magicroom: ["9M"], + mistyexplosion: ["9M"], + mistyterrain: ["9M"], + mysticalfire: ["9M"], + nuzzle: ["9M"], + painsplit: ["9M"], + playrough: ["9M"], + powerswap: ["9M"], + powerwhip: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psychocut: ["9M"], + psyshock: ["9M"], + quash: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + swordsdance: ["9M"], + thunderwave: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + wonderroom: ["9M"], + }, + }, + mrrime: { + learnset: { + afteryou: ["9M"], + allyswitch: ["9M"], + attract: ["9M"], + avalanche: ["9M"], + batonpass: ["9M"], + blizzard: ["9M"], + block: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + confuseray: ["9M"], + copycat: ["9M"], + dazzlinggleam: ["9M"], + drainpunch: ["9M"], + encore: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + foulplay: ["9M"], + freezedry: ["9M"], + frostbreath: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + guardswap: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypnosis: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + iceshard: ["9M"], + icespinner: ["9M"], + iciclespear: ["9M"], + icywind: ["9M"], + irondefense: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + megakick: ["9M"], + mirrorcoat: ["9M"], + mistyterrain: ["9M"], + nastyplot: ["9M"], + payback: ["9M"], + powersplit: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + rapidspin: ["9M"], + recycle: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roleplay: ["9M"], + round: ["9M"], + safeguard: ["9M"], + screech: ["9M"], + shadowball: ["9M"], + sheercold: ["9M"], + skillswap: ["9M"], + slackoff: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + snowscape: ["9M"], + solarbeam: ["9M"], + stompingtantrum: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + teeterdance: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + tickle: ["9M"], + torment: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + tripleaxel: ["9M"], + uproar: ["9M"], + wonderroom: ["9M"], + zenheadbutt: ["9M"], + }, + }, + runerigus: { + learnset: { + allyswitch: ["9M"], + amnesia: ["9M"], + attract: ["9M"], + bodypress: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + darkpulse: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + dragonpulse: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + faketears: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + guardsplit: ["9M"], + guardswap: ["9M"], + haze: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + meanlook: ["9M"], + memento: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + payback: ["9M"], + phantomforce: ["9M"], + poltergeist: ["9M"], + powersplit: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + psychic: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + round: ["9M"], + safeguard: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + selfdestruct: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowpunch: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + stealthrock: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + taunt: ["9M"], + thief: ["9M"], + toxicspikes: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + willowisp: ["9M"], + wonderroom: ["9M"], + zenheadbutt: ["9M"], + }, + }, + alcremie: { + learnset: { + acidarmor: ["9M"], + alluringvoice: ["9M"], + aromaticmist: ["9M"], + attract: ["9M"], + babydolleyes: ["9M"], + calmmind: ["9M"], + charm: ["9M"], + dazzlinggleam: ["9M"], + decorate: ["9M"], + drainpunch: ["9M"], + drainingkiss: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + entrainment: ["9M"], + facade: ["9M"], + faketears: ["9M"], + fling: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + lastresort: ["9M"], + lightscreen: ["9M"], + magicroom: ["9M"], + mistyexplosion: ["9M"], + mistyterrain: ["9M"], + mysticalfire: ["9M"], + painsplit: ["9M"], + playrough: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psyshock: ["9M"], + recover: ["9M"], + rest: ["9M"], + round: ["9M"], + safeguard: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sweetkiss: ["9M"], + sweetscent: ["9M"], + triattack: ["9M"], + wonderroom: ["9M"], + }, + }, + morpeko: { + learnset: { + agility: ["9M"], + assurance: ["9M"], + aurawheel: ["9M"], + batonpass: ["9M"], + bite: ["9M"], + brickbreak: ["9M"], + bulletseed: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + crunch: ["9M"], + darkpulse: ["9M"], + doubleedge: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + firefang: ["9M"], + flatter: ["9M"], + fling: ["9M"], + foulplay: ["9M"], + icefang: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + nastyplot: ["9M"], + outrage: ["9M"], + partingshot: ["9M"], + payback: ["9M"], + powertrip: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + quash: ["9M"], + quickattack: ["9M"], + rapidspin: ["9M"], + rest: ["9M"], + reversal: ["9M"], + risingvoltage: ["9M"], + round: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + snore: ["9M"], + spite: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + superfang: ["9M"], + swagger: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thrash: ["9M"], + thunder: ["9M"], + thunderfang: ["9M"], + thunderpunch: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + tickle: ["9M"], + torment: ["9M"], + uproar: ["9M"], + voltswitch: ["9M"], + wildcharge: ["9M"], + }, + }, + dragapult: { + learnset: { + acrobatics: ["9M"], + agility: ["9M"], + assurance: ["9M"], + batonpass: ["9M"], + beatup: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + disable: ["9M"], + dive: ["9M"], + doublehit: ["9M"], + doubleteam: ["9M"], + doubleedge: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragondance: ["9M"], + dragondarts: ["9M"], + dragonpulse: ["9M"], + dragonrush: ["9M"], + dragontail: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + flamethrower: ["9M"], + fly: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + infestation: ["9M"], + lastresort: ["9M"], + lightscreen: ["9M"], + lockon: ["9M"], + nightshade: ["9M"], + outrage: ["9M"], + phantomforce: ["9M"], + pounce: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + quickattack: ["9M"], + reflect: ["9M"], + rest: ["9M"], + round: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snore: ["9M"], + solarbeam: ["9M"], + steelwing: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + surf: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + triattack: ["9M"], + uturn: ["9M"], + willowisp: ["9M"], + }, + }, + wyrdeer: { + learnset: { + agility: ["9M"], + bite: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + chargebeam: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + dig: ["9M"], + disable: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + extrasensory: ["9M"], + facade: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + gravity: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + hypnosis: ["9M"], + imprison: ["9M"], + lightscreen: ["9M"], + lunge: ["9M"], + megahorn: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicnoise: ["9M"], + psyshieldbash: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roar: ["9M"], + roleplay: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + solarbeam: ["9M"], + spite: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + thief: ["9M"], + thrash: ["9M"], + throatchop: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + uproar: ["9M"], + wildcharge: ["9M"], + zenheadbutt: ["9M"], + }, + }, + kleavor: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + ancientpower: ["9M"], + batonpass: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bugbite: ["9M"], + bugbuzz: ["9M"], + closecombat: ["9M"], + counter: ["9M"], + defog: ["9M"], + doublehit: ["9M"], + doubleteam: ["9M"], + doubleedge: ["9M"], + dualwingbeat: ["9M"], + endure: ["9M"], + facade: ["9M"], + feint: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + lightscreen: ["9M"], + lunge: ["9M"], + nightslash: ["9M"], + pounce: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + stealthrock: ["9M"], + stoneaxe: ["9M"], + stoneedge: ["9M"], + strugglebug: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + tailwind: ["9M"], + thief: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + vacuumwave: ["9M"], + xscissor: ["9M"], + }, + }, + basculegion: { + learnset: { + agility: ["9M"], + aquajet: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + chillingwater: ["9M"], + confuseray: ["9M"], + crunch: ["9M"], + doubleedge: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + flail: ["9M"], + flipturn: ["9M"], + gigaimpact: ["9M"], + headsmash: ["9M"], + hex: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icywind: ["9M"], + lastrespects: ["9M"], + liquidation: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + nightshade: ["9M"], + outrage: ["9M"], + painsplit: ["9M"], + phantomforce: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + raindance: ["9M"], + rest: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snowscape: ["9M"], + soak: ["9M"], + spite: ["9M"], + substitute: ["9M"], + surf: ["9M"], + thrash: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + wavecrash: ["9M"], + whirlpool: ["9M"], + zenheadbutt: ["9M"], + }, + }, + basculegionf: { + learnset: { + agility: ["9M"], + aquajet: ["9M"], + bite: ["9M"], + blizzard: ["9M"], + chillingwater: ["9M"], + confuseray: ["9M"], + crunch: ["9M"], + doubleedge: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + flail: ["9M"], + flipturn: ["9M"], + gigaimpact: ["9M"], + headsmash: ["9M"], + hex: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icebeam: ["9M"], + icefang: ["9M"], + icywind: ["9M"], + lastrespects: ["9M"], + liquidation: ["9M"], + mudshot: ["9M"], + muddywater: ["9M"], + nightshade: ["9M"], + outrage: ["9M"], + painsplit: ["9M"], + phantomforce: ["9M"], + protect: ["9M"], + psychicfangs: ["9M"], + raindance: ["9M"], + rest: ["9M"], + scaleshot: ["9M"], + scaryface: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + snowscape: ["9M"], + soak: ["9M"], + spite: ["9M"], + substitute: ["9M"], + surf: ["9M"], + thrash: ["9M"], + uproar: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + wavecrash: ["9M"], + whirlpool: ["9M"], + zenheadbutt: ["9M"], + }, + }, + sneasler: { + learnset: { + acidspray: ["9M"], + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + calmmind: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + counter: ["9M"], + dig: ["9M"], + direclaw: ["9M"], + doublehit: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + feint: ["9M"], + firepunch: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gunkshot: ["9M"], + hyperbeam: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + nastyplot: ["9M"], + nightslash: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + quickattack: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + screech: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + spite: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + switcheroo: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + upperhand: ["9M"], + vacuumwave: ["9M"], + venoshock: ["9M"], + xscissor: ["9M"], + }, + }, + meowscarada: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + allyswitch: ["9M"], + aurasphere: ["9M"], + bite: ["9M"], + brickbreak: ["9M"], + bulletseed: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + copycat: ["9M"], + darkpulse: ["9M"], + doubleteam: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + faketears: ["9M"], + fling: ["9M"], + flowertrick: ["9M"], + foulplay: ["9M"], + frenzyplant: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + knockoff: ["9M"], + lashout: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + mudslap: ["9M"], + nastyplot: ["9M"], + nightslash: ["9M"], + petalblizzard: ["9M"], + playrough: ["9M"], + pollenpuff: ["9M"], + powergem: ["9M"], + protect: ["9M"], + psychup: ["9M"], + quickattack: ["9M"], + rest: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + solarbeam: ["9M"], + spikes: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderpunch: ["9M"], + toxicspikes: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + tripleaxel: ["9M"], + uturn: ["9M"], + worryseed: ["9M"], + }, + }, + skeledirge: { + learnset: { + alluringvoice: ["9M"], + belch: ["9M"], + bite: ["9M"], + blastburn: ["9M"], + bodyslam: ["9M"], + burnup: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dig: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + gigaimpact: ["9M"], + heatcrash: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + imprison: ["9M"], + mudslap: ["9M"], + nightshade: ["9M"], + outrage: ["9M"], + overheat: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + rest: ["9M"], + roar: ["9M"], + round: ["9M"], + scaryface: ["9M"], + scorchingsands: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + sing: ["9M"], + slackoff: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + solarbeam: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + temperflare: ["9M"], + thunderfang: ["9M"], + torchsong: ["9M"], + willowisp: ["9M"], + yawn: ["9M"], + zenheadbutt: ["9M"], + }, + }, + quaquaval: { + learnset: { + acrobatics: ["9M"], + aerialace: ["9M"], + agility: ["9M"], + aircutter: ["9M"], + airslash: ["9M"], + aquacutter: ["9M"], + aquajet: ["9M"], + aquastep: ["9M"], + batonpass: ["9M"], + bravebird: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + chillingwater: ["9M"], + closecombat: ["9M"], + coaching: ["9M"], + counter: ["9M"], + detect: ["9M"], + doublehit: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + fling: ["9M"], + flipturn: ["9M"], + focusenergy: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hurricane: ["9M"], + hydrocannon: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + icespinner: ["9M"], + icywind: ["9M"], + knockoff: ["9M"], + lastresort: ["9M"], + liquidation: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + megakick: ["9M"], + mistyterrain: ["9M"], + protect: ["9M"], + psychup: ["9M"], + raindance: ["9M"], + rapidspin: ["9M"], + rest: ["9M"], + reversal: ["9M"], + roost: ["9M"], + sleeptalk: ["9M"], + substitute: ["9M"], + surf: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + tripleaxel: ["9M"], + uturn: ["9M"], + upperhand: ["9M"], + waterpulse: ["9M"], + wavecrash: ["9M"], + whirlpool: ["9M"], + }, + }, + maushold: { + learnset: { + aerialace: ["9M"], + afteryou: ["9M"], + agility: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + beatup: ["9M"], + bite: ["9M"], + bulletseed: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + copycat: ["9M"], + crunch: ["9M"], + dig: ["9M"], + doublehit: ["9M"], + doubleedge: ["9M"], + encore: ["9M"], + endure: ["9M"], + facade: ["9M"], + faketears: ["9M"], + feint: ["9M"], + followme: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + playrough: ["9M"], + populationbomb: ["9M"], + protect: ["9M"], + raindance: ["9M"], + rest: ["9M"], + seedbomb: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superfang: ["9M"], + switcheroo: ["9M"], + taunt: ["9M"], + thief: ["9M"], + thunderwave: ["9M"], + tickle: ["9M"], + tidyup: ["9M"], + trailblaze: ["9M"], + uturn: ["9M"], + waterpulse: ["9M"], + }, + }, + garganacl: { + learnset: { + ancientpower: ["9M"], + avalanche: ["9M"], + block: ["9M"], + bodypress: ["9M"], + bodyslam: ["9M"], + brickbreak: ["9M"], + bulldoze: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + dynamicpunch: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + explosion: ["9M"], + facade: ["9M"], + firepunch: ["9M"], + fissure: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + gravity: ["9M"], + hammerarm: ["9M"], + hardpress: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + icepunch: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + meteorbeam: ["9M"], + mudshot: ["9M"], + powergem: ["9M"], + protect: ["9M"], + raindance: ["9M"], + recover: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + rockpolish: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + saltcure: ["9M"], + sandstorm: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + stealthrock: ["9M"], + stompingtantrum: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + thunderpunch: ["9M"], + wideguard: ["9M"], + zenheadbutt: ["9M"], + }, + }, + armarouge: { + learnset: { + acidspray: ["9M"], + allyswitch: ["9M"], + armorcannon: ["9M"], + aurasphere: ["9M"], + burnup: ["9M"], + calmmind: ["9M"], + clearsmog: ["9M"], + confuseray: ["9M"], + darkpulse: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + dragonpulse: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + lavaplume: ["9M"], + lightscreen: ["9M"], + meteorbeam: ["9M"], + mysticalfire: ["9M"], + nightshade: ["9M"], + overheat: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + reflect: ["9M"], + rest: ["9M"], + scorchingsands: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + solarbeam: ["9M"], + spite: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + taunt: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + weatherball: ["9M"], + wideguard: ["9M"], + willowisp: ["9M"], + }, + }, + ceruledge: { + learnset: { + allyswitch: ["9M"], + bitterblade: ["9M"], + brickbreak: ["9M"], + bulkup: ["9M"], + burnup: ["9M"], + clearsmog: ["9M"], + closecombat: ["9M"], + confuseray: ["9M"], + curse: ["9M"], + destinybond: ["9M"], + disable: ["9M"], + dragonclaw: ["9M"], + endure: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firespin: ["9M"], + flamecharge: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + fling: ["9M"], + gigaimpact: ["9M"], + heatwave: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + lavaplume: ["9M"], + lightscreen: ["9M"], + nightshade: ["9M"], + nightslash: ["9M"], + overheat: ["9M"], + phantomforce: ["9M"], + poisonjab: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychocut: ["9M"], + quickguard: ["9M"], + reflect: ["9M"], + rest: ["9M"], + shadowball: ["9M"], + shadowclaw: ["9M"], + shadowsneak: ["9M"], + sleeptalk: ["9M"], + solarblade: ["9M"], + spite: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + throatchop: ["9M"], + vacuumwave: ["9M"], + willowisp: ["9M"], + xscissor: ["9M"], + }, + }, + bellibolt: { + learnset: { + acidspray: ["9M"], + charge: ["9M"], + chargebeam: ["9M"], + chillingwater: ["9M"], + confuseray: ["9M"], + discharge: ["9M"], + eerieimpulse: ["9M"], + electricterrain: ["9M"], + electroball: ["9M"], + electroweb: ["9M"], + endure: ["9M"], + flail: ["9M"], + gigaimpact: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + lightscreen: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + muddywater: ["9M"], + paraboliccharge: ["9M"], + protect: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + slackoff: ["9M"], + sleeptalk: ["9M"], + soak: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + supercellslam: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + toxic: ["9M"], + voltswitch: ["9M"], + waterpulse: ["9M"], + weatherball: ["9M"], + wildcharge: ["9M"], + zapcannon: ["9M"], + }, + }, + scovillain: { + learnset: { + bite: ["9M"], + bulletseed: ["9M"], + burningjealousy: ["9M"], + crunch: ["9M"], + doublehit: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + fireblast: ["9M"], + firefang: ["9M"], + firespin: ["9M"], + flamethrower: ["9M"], + flareblitz: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + helpinghand: ["9M"], + hyperbeam: ["9M"], + ingrain: ["9M"], + lashout: ["9M"], + leafstorm: ["9M"], + leechseed: ["9M"], + overheat: ["9M"], + protect: ["9M"], + ragepowder: ["9M"], + rest: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + seedbomb: ["9M"], + sleeptalk: ["9M"], + solarbeam: ["9M"], + spicyextract: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + superfang: ["9M"], + swagger: ["9M"], + temperflare: ["9M"], + thief: ["9M"], + thunderfang: ["9M"], + trailblaze: ["9M"], + willowisp: ["9M"], + worryseed: ["9M"], + zenheadbutt: ["9M"], + }, + }, + espathra: { + learnset: { + aerialace: ["9M"], + agility: ["9M"], + allyswitch: ["9M"], + babydolleyes: ["9M"], + batonpass: ["9M"], + bodyslam: ["9M"], + bravebird: ["9M"], + calmmind: ["9M"], + confuseray: ["9M"], + dazzlinggleam: ["9M"], + doubleedge: ["9M"], + drillpeck: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + featherdance: ["9M"], + flashcannon: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + helpinghand: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + hypnosis: ["9M"], + lastresort: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + luminacrash: ["9M"], + mudslap: ["9M"], + nightshade: ["9M"], + pluck: ["9M"], + pounce: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + quickattack: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roost: ["9M"], + sandstorm: ["9M"], + seedbomb: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + thief: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + uturn: ["9M"], + uproar: ["9M"], + zenheadbutt: ["9M"], + }, + }, + tinkaton: { + learnset: { + babydolleyes: ["9M"], + brickbreak: ["9M"], + brutalswing: ["9M"], + bulldoze: ["9M"], + covet: ["9M"], + drainingkiss: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fakeout: ["9M"], + faketears: ["9M"], + feint: ["9M"], + flashcannon: ["9M"], + flatter: ["9M"], + fling: ["9M"], + foulplay: ["9M"], + gigatonhammer: ["9M"], + hardpress: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + icehammer: ["9M"], + knockoff: ["9M"], + lightscreen: ["9M"], + metalsound: ["9M"], + playrough: ["9M"], + pounce: ["9M"], + protect: ["9M"], + quash: ["9M"], + reflect: ["9M"], + rest: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + screech: ["9M"], + skillswap: ["9M"], + skittersmack: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sweetkiss: ["9M"], + swordsdance: ["9M"], + thief: ["9M"], + thunderwave: ["9M"], + woodhammer: ["9M"], + }, + }, + palafin: { + learnset: { + acrobatics: ["9M"], + agility: ["9M"], + aquajet: ["9M"], + aquatail: ["9M"], + aurasphere: ["9M"], + blizzard: ["9M"], + bodyslam: ["9M"], + boomburst: ["9M"], + bounce: ["9M"], + bulkup: ["9M"], + charm: ["9M"], + chillingwater: ["9M"], + closecombat: ["9M"], + counter: ["9M"], + dive: ["9M"], + doublehit: ["9M"], + drainpunch: ["9M"], + drainingkiss: ["9M"], + encore: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + facade: ["9M"], + fling: ["9M"], + flipturn: ["9M"], + focusblast: ["9M"], + focusenergy: ["9M"], + focuspunch: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + hardpress: ["9M"], + haze: ["9M"], + helpinghand: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + icebeam: ["9M"], + icepunch: ["9M"], + icywind: ["9M"], + ironhead: ["9M"], + jetpunch: ["9M"], + liquidation: ["9M"], + outrage: ["9M"], + protect: ["9M"], + psychup: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + sleeptalk: ["9M"], + substitute: ["9M"], + surf: ["9M"], + taunt: ["9M"], + throatchop: ["9M"], + tickle: ["9M"], + waterpulse: ["9M"], + waterfall: ["9M"], + wavecrash: ["9M"], + whirlpool: ["9M"], + zenheadbutt: ["9M"], + }, + }, + orthworm: { + learnset: { + bodypress: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + coil: ["9M"], + curse: ["9M"], + dig: ["9M"], + doubleedge: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + facade: ["9M"], + flashcannon: ["9M"], + gigaimpact: ["9M"], + heavyslam: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + irontail: ["9M"], + metalburst: ["9M"], + metalsound: ["9M"], + mudshot: ["9M"], + mudslap: ["9M"], + protect: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + shedtail: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + spikes: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + stompingtantrum: ["9M"], + substitute: ["9M"], + wrap: ["9M"], + }, + }, + glimmora: { + learnset: { + acidarmor: ["9M"], + acidspray: ["9M"], + ancientpower: ["9M"], + confuseray: ["9M"], + dazzlinggleam: ["9M"], + earthpower: ["9M"], + endure: ["9M"], + energyball: ["9M"], + explosion: ["9M"], + facade: ["9M"], + flashcannon: ["9M"], + gigaimpact: ["9M"], + gunkshot: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + lightscreen: ["9M"], + memento: ["9M"], + meteorbeam: ["9M"], + mortalspin: ["9M"], + mudshot: ["9M"], + powergem: ["9M"], + protect: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + rockblast: ["9M"], + rockpolish: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + sandtomb: ["9M"], + sandstorm: ["9M"], + selfdestruct: ["9M"], + sleeptalk: ["9M"], + sludgebomb: ["9M"], + sludgewave: ["9M"], + smackdown: ["9M"], + solarbeam: ["9M"], + spikes: ["9M"], + spikyshield: ["9M"], + stealthrock: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + toxic: ["9M"], + toxicspikes: ["9M"], + venoshock: ["9M"], + }, + }, + farigiraf: { + learnset: { + agility: ["9M"], + allyswitch: ["9M"], + amnesia: ["9M"], + assurance: ["9M"], + batonpass: ["9M"], + beatup: ["9M"], + bodyslam: ["9M"], + bulldoze: ["9M"], + calmmind: ["9M"], + chargebeam: ["9M"], + confuseray: ["9M"], + crunch: ["9M"], + curse: ["9M"], + dazzlinggleam: ["9M"], + doublehit: ["9M"], + doubleedge: ["9M"], + earthquake: ["9M"], + endeavor: ["9M"], + endure: ["9M"], + energyball: ["9M"], + expandingforce: ["9M"], + facade: ["9M"], + foulplay: ["9M"], + futuresight: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + gravity: ["9M"], + guardswap: ["9M"], + helpinghand: ["9M"], + highhorsepower: ["9M"], + hyperbeam: ["9M"], + hypervoice: ["9M"], + imprison: ["9M"], + ironhead: ["9M"], + lightscreen: ["9M"], + lowkick: ["9M"], + meanlook: ["9M"], + mirrorcoat: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + powerswap: ["9M"], + protect: ["9M"], + psychup: ["9M"], + psychic: ["9M"], + psychicfangs: ["9M"], + psychicnoise: ["9M"], + psychicterrain: ["9M"], + psyshock: ["9M"], + raindance: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roar: ["9M"], + shadowball: ["9M"], + skillswap: ["9M"], + sleeptalk: ["9M"], + stompingtantrum: ["9M"], + storedpower: ["9M"], + substitute: ["9M"], + sunnyday: ["9M"], + thief: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + trailblaze: ["9M"], + trick: ["9M"], + trickroom: ["9M"], + twinbeam: ["9M"], + uproar: ["9M"], + wish: ["9M"], + zenheadbutt: ["9M"], + }, + }, + kingambit: { + learnset: { + aerialace: ["9M"], + airslash: ["9M"], + assurance: ["9M"], + brickbreak: ["9M"], + darkpulse: ["9M"], + dig: ["9M"], + endure: ["9M"], + facade: ["9M"], + flashcannon: ["9M"], + fling: ["9M"], + focusblast: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + guillotine: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + kowtowcleave: ["9M"], + lashout: ["9M"], + lowkick: ["9M"], + lowsweep: ["9M"], + meanlook: ["9M"], + metalburst: ["9M"], + metalsound: ["9M"], + nightslash: ["9M"], + poisonjab: ["9M"], + protect: ["9M"], + quickguard: ["9M"], + raindance: ["9M"], + rest: ["9M"], + reversal: ["9M"], + rocktomb: ["9M"], + sandstorm: ["9M"], + scaryface: ["9M"], + shadowclaw: ["9M"], + sleeptalk: ["9M"], + snarl: ["9M"], + spite: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + swordsdance: ["9M"], + taunt: ["9M"], + thief: ["9M"], + throatchop: ["9M"], + thunderwave: ["9M"], + torment: ["9M"], + xscissor: ["9M"], + zenheadbutt: ["9M"], + }, + }, + sinistcha: { + learnset: { + calmmind: ["9M"], + curse: ["9M"], + endure: ["9M"], + energyball: ["9M"], + foulplay: ["9M"], + gigadrain: ["9M"], + grassyterrain: ["9M"], + hex: ["9M"], + hyperbeam: ["9M"], + imprison: ["9M"], + irondefense: ["9M"], + leafstorm: ["9M"], + lifedew: ["9M"], + matchagotcha: ["9M"], + memento: ["9M"], + nastyplot: ["9M"], + nightshade: ["9M"], + painsplit: ["9M"], + phantomforce: ["9M"], + poltergeist: ["9M"], + protect: ["9M"], + psychup: ["9M"], + ragepowder: ["9M"], + reflect: ["9M"], + rest: ["9M"], + scald: ["9M"], + shadowball: ["9M"], + sleeptalk: ["9M"], + solarbeam: ["9M"], + spite: ["9M"], + strengthsap: ["9M"], + stunspore: ["9M"], + substitute: ["9M"], + trickroom: ["9M"], + uproar: ["9M"], + }, + }, + sinistchamasterpiece: {}, + archaludon: { + learnset: { + aurasphere: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + brickbreak: ["9M"], + darkpulse: ["9M"], + doubleedge: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonclaw: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + earthquake: ["9M"], + electroshot: ["9M"], + endure: ["9M"], + facade: ["9M"], + flashcannon: ["9M"], + focusenergy: ["9M"], + foulplay: ["9M"], + gigaimpact: ["9M"], + gyroball: ["9M"], + hardpress: ["9M"], + heavyslam: ["9M"], + hyperbeam: ["9M"], + irondefense: ["9M"], + ironhead: ["9M"], + lightscreen: ["9M"], + metalburst: ["9M"], + metalsound: ["9M"], + meteorbeam: ["9M"], + mirrorcoat: ["9M"], + nightslash: ["9M"], + outrage: ["9M"], + protect: ["9M"], + reflect: ["9M"], + rest: ["9M"], + roar: ["9M"], + rockslide: ["9M"], + rocktomb: ["9M"], + scaryface: ["9M"], + sleeptalk: ["9M"], + smackdown: ["9M"], + snarl: ["9M"], + solarbeam: ["9M"], + stealthrock: ["9M"], + steelbeam: ["9M"], + stoneedge: ["9M"], + substitute: ["9M"], + swordsdance: ["9M"], + thunder: ["9M"], + thunderwave: ["9M"], + thunderbolt: ["9M"], + }, + }, + hydrapple: { + learnset: { + bodypress: ["9M"], + bodyslam: ["9M"], + breakingswipe: ["9M"], + bugbite: ["9M"], + bulletseed: ["9M"], + curse: ["9M"], + doublehit: ["9M"], + doubleedge: ["9M"], + dracometeor: ["9M"], + dragoncheer: ["9M"], + dragonpulse: ["9M"], + dragontail: ["9M"], + earthpower: ["9M"], + earthquake: ["9M"], + endure: ["9M"], + energyball: ["9M"], + facade: ["9M"], + ficklebeam: ["9M"], + gigadrain: ["9M"], + gigaimpact: ["9M"], + grassknot: ["9M"], + grassyglide: ["9M"], + grassyterrain: ["9M"], + growth: ["9M"], + gyroball: ["9M"], + heavyslam: ["9M"], + hydropump: ["9M"], + hyperbeam: ["9M"], + infestation: ["9M"], + leafstorm: ["9M"], + nastyplot: ["9M"], + outrage: ["9M"], + pollenpuff: ["9M"], + pounce: ["9M"], + powerwhip: ["9M"], + protect: ["9M"], + raindance: ["9M"], + recover: ["9M"], + recycle: ["9M"], + reflect: ["9M"], + rest: ["9M"], + seedbomb: ["9M"], + sleeptalk: ["9M"], + solarbeam: ["9M"], + substitute: ["9M"], + suckerpunch: ["9M"], + sunnyday: ["9M"], + sweetscent: ["9M"], + syrupbomb: ["9M"], + uproar: ["9M"], + yawn: ["9M"], + }, + }, +}; diff --git a/data/mods/champions/moves.ts b/data/mods/champions/moves.ts new file mode 100644 index 0000000000..697f61cd0a --- /dev/null +++ b/data/mods/champions/moves.ts @@ -0,0 +1,1139 @@ +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { + absorb: { + inherit: true, + isNonstandard: "Past", + }, + acid: { + inherit: true, + isNonstandard: "Past", + }, + aeroblast: { + inherit: true, + isNonstandard: "Past", + }, + anchorshot: { + inherit: true, + basePower: 90, + }, + appleacid: { + inherit: true, + basePower: 90, + }, + armthrust: { + inherit: true, + isNonstandard: "Past", + }, + astonish: { + inherit: true, + isNonstandard: "Past", + }, + astralbarrage: { + inherit: true, + basePower: 110, + isNonstandard: "Past", + }, + attackorder: { + inherit: true, + isNonstandard: "Past", + }, + aurorabeam: { + inherit: true, + isNonstandard: "Past", + }, + banefulbunker: { + inherit: true, + pp: 5, + }, + barbbarrage: { + inherit: true, + isNonstandard: "Past", + }, + beakblast: { + inherit: true, + basePower: 120, + pp: 5, + }, + belch: { + inherit: true, + onTry(source) { + return source.ateBerry; + }, + onDisableMove: undefined, // no inherit + desc: "Fails unless the user has eaten a Berry, either by eating one that was held, stealing and eating one off another Pokemon with Bug Bite or Pluck, or eating one that was thrown at it with Fling. Once the condition is met, this move can be selected and used for the rest of the battle even if the user gains or uses another item or switches out. Consuming a Berry with Natural Gift does not count for the purposes of eating one.", + shortDesc: "Fails unless the user has eaten a Berry.", + }, + behemothbash: { + inherit: true, + isNonstandard: "Past", + }, + behemothblade: { + inherit: true, + isNonstandard: "Past", + }, + blazingtorque: { + inherit: true, + isNonstandard: "Past", + }, + bleakwindstorm: { + inherit: true, + isNonstandard: "Past", + }, + bloodmoon: { + inherit: true, + basePower: 130, + isNonstandard: "Past", + }, + blueflare: { + inherit: true, + isNonstandard: "Past", + }, + boltbeak: { + inherit: true, + basePower: 80, + }, + boltstrike: { + inherit: true, + isNonstandard: "Past", + }, + bonerush: { + inherit: true, + basePower: 30, + }, + branchpoke: { + inherit: true, + isNonstandard: "Past", + }, + brine: { + inherit: true, + isNonstandard: "Past", + }, + bubblebeam: { + inherit: true, + isNonstandard: "Past", + }, + burningbulwark: { + inherit: true, + isNonstandard: "Past", + }, + burnup: { + inherit: true, + isNonstandard: null, + }, + celebrate: { + inherit: true, + isNonstandard: "Past", + }, + chloroblast: { + inherit: true, + isNonstandard: "Past", + }, + clangoroussoul: { + inherit: true, + accuracy: true, + }, + collisioncourse: { + inherit: true, + isNonstandard: "Past", + }, + combattorque: { + inherit: true, + isNonstandard: "Past", + }, + confide: { + inherit: true, + isNonstandard: "Past", + }, + confusion: { + inherit: true, + isNonstandard: "Past", + }, + conversion: { + inherit: true, + isNonstandard: "Past", + }, + conversion2: { + inherit: true, + isNonstandard: "Past", + }, + corrosivegas: { + inherit: true, + isNonstandard: null, + }, + courtchange: { + inherit: true, + isNonstandard: "Past", + }, + crabhammer: { + inherit: true, + accuracy: 95, + }, + crushclaw: { + inherit: true, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 }, + }, + crushgrip: { + inherit: true, + isNonstandard: "Past", + }, + cut: { + inherit: true, + isNonstandard: "Past", + }, + darkvoid: { + inherit: true, + isNonstandard: "Past", + }, + defendorder: { + inherit: true, + isNonstandard: "Past", + }, + defensecurl: { + inherit: true, + isNonstandard: "Past", + }, + diamondstorm: { + inherit: true, + isNonstandard: "Past", + }, + direclaw: { + inherit: true, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 }, + secondary: { + chance: 30, + onHit(target, source) { + const status = this.sample(['psn', 'par', 'slp']); + target.trySetStatus(status, source); + }, + }, + desc: "Has a 30% chance to cause the target to either fall asleep, become poisoned, or become paralyzed.", + shortDesc: "30% chance to sleep, poison, or paralyze target.", + }, + disarmingvoice: { + inherit: true, + isNonstandard: "Past", + }, + doodle: { + inherit: true, + isNonstandard: "Past", + }, + doomdesire: { + inherit: true, + isNonstandard: "Past", + }, + doublekick: { + inherit: true, + isNonstandard: "Past", + }, + doubleshock: { + inherit: true, + isNonstandard: "Custom", + }, + dragonascent: { + inherit: true, + isNonstandard: "Past", + }, + dragonbreath: { + inherit: true, + isNonstandard: "Past", + }, + dragoncheer: { + inherit: true, + flags: { bypasssub: 1, allyanim: 1, metronome: 1, sound: 1 }, + }, + dragonclaw: { + inherit: true, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 }, + }, + dragonenergy: { + inherit: true, + isNonstandard: "Past", + }, + dragonhammer: { + inherit: true, + basePower: 100, + isNonstandard: "Past", + }, + dreameater: { + inherit: true, + isNonstandard: "Past", + }, + drumbeating: { + inherit: true, + isNonstandard: "Past", + }, + dynamaxcannon: { + inherit: true, + isNonstandard: "Past", + }, + echoedvoice: { + inherit: true, + isNonstandard: "Past", + }, + electrify: { + inherit: true, + isNonstandard: null, + }, + electrodrift: { + inherit: true, + isNonstandard: "Past", + }, + ember: { + inherit: true, + isNonstandard: "Past", + }, + encore: { + inherit: true, + condition: { + inherit: true, + onStart(target) { + let move: Move | ActiveMove | null = target.lastMove; + if (!move || target.volatiles['dynamax']) return false; + + // Encore only works on Max Moves if the base move is not itself a Max Move + if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove); + const moveSlot = target.getMoveData(move.id); + if (move.isZ || move.isMax || move.flags['failencore'] || !moveSlot || moveSlot.pp <= 0) { + // it failed + return false; + } + this.effectState.move = move.id; + this.add('-start', target, 'Encore'); + const action = this.queue.willMove(target); + if (!action) { + this.effectState.duration!++; + // TODO: this is a quick fix, check if move priority is changed when Mental Herb cures Encore + } else if (!target.hasItem('mentalherb')) { + this.queue.changeAction(target, { + choice: 'move', + // target: undefined, + // targetLoc: undefined, + moveid: move.id, + order: action.order, // TODO: check Quash + Encore interaction + }); + } + }, + }, + }, + esperwing: { + inherit: true, + isNonstandard: "Past", + }, + fairywind: { + inherit: true, + isNonstandard: "Past", + }, + fakeout: { + inherit: true, + onDisableMove(pokemon) { + if (pokemon.activeMoveActions > 1) { + pokemon.disableMove('fakeout'); + } + }, + desc: "Has a 100% chance to make the target flinch. This move cannot be selected unless it is the user's first turn on the field.", + }, + falsesurrender: { + inherit: true, + isNonstandard: "Past", + }, + falseswipe: { + inherit: true, + isNonstandard: "Past", + }, + fierywrath: { + inherit: true, + isNonstandard: "Past", + }, + filletaway: { + inherit: true, + isNonstandard: "Past", + }, + firelash: { + inherit: true, + basePower: 90, + }, + firepledge: { + inherit: true, + isNonstandard: "Past", + }, + firstimpression: { + inherit: true, + basePower: 100, + onDisableMove(pokemon) { + if (pokemon.activeMoveActions > 1) { + pokemon.disableMove('firstimpression'); + } + }, + desc: "This move cannot be selected unless it is the user's first turn on the field.", + }, + fishiousrend: { + inherit: true, + basePower: 80, + }, + flamewheel: { + inherit: true, + isNonstandard: "Past", + }, + fleurcannon: { + inherit: true, + isNonstandard: "Past", + }, + floralhealing: { + inherit: true, + isNonstandard: "Past", + }, + forcepalm: { + inherit: true, + isNonstandard: "Past", + }, + freezedry: { + inherit: true, + secondary: undefined, // no inherit + desc: "This move's type effectiveness against Water is changed to be super effective no matter what this move's type is.", + shortDesc: "Super effective on Water.", + }, + freezeshock: { + inherit: true, + isNonstandard: "Past", + }, + freezingglare: { + inherit: true, + isNonstandard: "Past", + }, + furyattack: { + inherit: true, + isNonstandard: "Past", + }, + furycutter: { + inherit: true, + isNonstandard: "Past", + }, + furyswipes: { + inherit: true, + isNonstandard: "Past", + }, + fusionbolt: { + inherit: true, + isNonstandard: "Past", + }, + fusionflare: { + inherit: true, + isNonstandard: "Past", + }, + geargrind: { + inherit: true, + accuracy: 90, + basePower: 60, + }, + glaciallance: { + inherit: true, + isNonstandard: "Past", + }, + glaciate: { + inherit: true, + isNonstandard: "Past", + }, + glaiverush: { + inherit: true, + isNonstandard: "Past", + }, + grasspledge: { + inherit: true, + isNonstandard: "Past", + }, + gravapple: { + inherit: true, + basePower: 90, + }, + growl: { + inherit: true, + isNonstandard: "Past", + }, + growth: { + inherit: true, + type: "Grass", + }, + gust: { + inherit: true, + isNonstandard: "Past", + }, + happyhour: { + inherit: true, + isNonstandard: "Past", + }, + harden: { + inherit: true, + isNonstandard: "Past", + }, + headbutt: { + inherit: true, + isNonstandard: "Past", + }, + heartswap: { + inherit: true, + isNonstandard: "Past", + }, + holdback: { + inherit: true, + isNonstandard: "Past", + }, + holdhands: { + inherit: true, + isNonstandard: "Past", + }, + honeclaws: { + inherit: true, + isNonstandard: "Past", + }, + hornattack: { + inherit: true, + isNonstandard: "Past", + }, + hydrosteam: { + inherit: true, + isNonstandard: "Past", + }, + hyperdrill: { + inherit: true, + basePower: 120, + isNonstandard: "Past", + }, + hyperspacefury: { + inherit: true, + isNonstandard: "Past", + }, + hyperspacehole: { + inherit: true, + isNonstandard: "Past", + }, + iceburn: { + inherit: true, + isNonstandard: "Past", + }, + incinerate: { + inherit: true, + isNonstandard: "Past", + }, + infernalparade: { + inherit: true, + basePower: 65, + }, + ironhead: { + inherit: true, + secondary: { + chance: 20, + volatileStatus: 'flinch', + }, + desc: "Has a 20% chance to make the target flinch.", + shortDesc: "20% chance to make the target flinch.", + }, + ivycudgel: { + inherit: true, + isNonstandard: "Past", + }, + jawlock: { + inherit: true, + isNonstandard: "Past", + }, + judgment: { + inherit: true, + isNonstandard: "Past", + }, + junglehealing: { + inherit: true, + isNonstandard: "Past", + }, + kingsshield: { + inherit: true, + isNonstandard: null, + pp: 5, + }, + leafage: { + inherit: true, + isNonstandard: "Past", + }, + leer: { + inherit: true, + isNonstandard: "Past", + }, + lick: { + inherit: true, + isNonstandard: "Past", + }, + lightofruin: { + inherit: true, + isNonstandard: null, + }, + lunarblessing: { + inherit: true, + isNonstandard: "Past", + }, + lunardance: { + inherit: true, + isNonstandard: "Past", + }, + lusterpurge: { + inherit: true, + isNonstandard: "Past", + }, + magicalleaf: { + inherit: true, + isNonstandard: "Past", + }, + magicaltorque: { + inherit: true, + isNonstandard: "Past", + }, + magmastorm: { + inherit: true, + isNonstandard: "Past", + }, + makeitrain: { + inherit: true, + accuracy: 95, + isNonstandard: "Past", + }, + malignantchain: { + inherit: true, + isNonstandard: "Past", + }, + megadrain: { + inherit: true, + isNonstandard: "Past", + }, + megapunch: { + inherit: true, + isNonstandard: "Past", + }, + metalclaw: { + inherit: true, + isNonstandard: "Past", + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 }, + }, + metronome: { + inherit: true, + isNonstandard: "Past", + }, + mightycleave: { + inherit: true, + isNonstandard: "Past", + }, + mimic: { + inherit: true, + isNonstandard: "Past", + }, + mist: { + inherit: true, + isNonstandard: "Past", + }, + mistball: { + inherit: true, + isNonstandard: "Past", + }, + moonblast: { + inherit: true, + secondary: { + chance: 10, + boosts: { + spa: -1, + }, + }, + desc: "Has a 10% chance to lower the target's Special Attack by 1 stage.", + shortDesc: "10% chance to lower the target's Sp. Atk by 1.", + }, + moongeistbeam: { + inherit: true, + isNonstandard: "Past", + }, + mountaingale: { + inherit: true, + basePower: 120, + }, + mysticalpower: { + inherit: true, + isNonstandard: "Past", + }, + nightdaze: { + inherit: true, + basePower: 90, + }, + nightslash: { + inherit: true, + pp: 20, + }, + nihillight: { + inherit: true, + pp: 5, + }, + noretreat: { + inherit: true, + isNonstandard: "Past", + }, + noxioustorque: { + inherit: true, + isNonstandard: "Past", + }, + obstruct: { + inherit: true, + pp: 5, + }, + orderup: { + inherit: true, + isNonstandard: "Past", + }, + originpulse: { + inherit: true, + isNonstandard: "Past", + }, + overdrive: { + inherit: true, + isNonstandard: "Past", + }, + payday: { + inherit: true, + isNonstandard: "Past", + }, + peck: { + inherit: true, + isNonstandard: "Past", + }, + photongeyser: { + inherit: true, + isNonstandard: "Past", + }, + playnice: { + inherit: true, + isNonstandard: "Past", + }, + poisongas: { + inherit: true, + isNonstandard: "Past", + }, + poisonsting: { + inherit: true, + isNonstandard: "Past", + }, + poisontail: { + inherit: true, + isNonstandard: "Past", + }, + powdersnow: { + inherit: true, + isNonstandard: "Past", + }, + powershift: { + inherit: true, + isNonstandard: null, + }, + precipiceblades: { + inherit: true, + isNonstandard: "Past", + }, + present: { + inherit: true, + isNonstandard: "Past", + }, + prismaticlaser: { + inherit: true, + isNonstandard: "Past", + }, + protect: { + inherit: true, + pp: 5, + }, + psybeam: { + inherit: true, + isNonstandard: "Past", + }, + psyblade: { + inherit: true, + isNonstandard: "Past", + }, + psychoboost: { + inherit: true, + isNonstandard: "Past", + }, + psyshieldbash: { + inherit: true, + basePower: 90, + }, + psystrike: { + inherit: true, + isNonstandard: "Past", + }, + purify: { + inherit: true, + pp: 5, + }, + pyroball: { + inherit: true, + isNonstandard: "Past", + }, + ragefist: { + inherit: true, + isNonstandard: "Past", + }, + // ragepowder: { + // inherit: true, + // flags: { noassist: 1, failcopycat: 1 }, + // }, + razorleaf: { + inherit: true, + isNonstandard: "Past", + }, + relicsong: { + inherit: true, + isNonstandard: "Past", + }, + retaliate: { + inherit: true, + isNonstandard: "Past", + }, + revelationdance: { + inherit: true, + basePower: 100, + isNonstandard: "Past", + }, + revivalblessing: { + inherit: true, + isNonstandard: "Custom", + }, + roaroftime: { + inherit: true, + isNonstandard: "Past", + }, + rocksmash: { + inherit: true, + isNonstandard: "Past", + }, + rockthrow: { + inherit: true, + isNonstandard: "Past", + }, + rollout: { + inherit: true, + isNonstandard: "Past", + }, + ruination: { + inherit: true, + isNonstandard: "Past", + }, + sacredfire: { + inherit: true, + isNonstandard: "Past", + }, + saltcure: { + inherit: true, + condition: { + inherit: true, + onResidual(pokemon) { + this.damage(pokemon.baseMaxhp / (pokemon.hasType(['Water', 'Steel']) ? 8 : 16)); + }, + }, + desc: "Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the target is Steel or Water type), rounded down, at the end of each turn during effect. This effect ends when the target is no longer active.", + shortDesc: "Deals 1/16 max HP each turn; 1/8 on Steel, Water.", + }, + sandattack: { + inherit: true, + isNonstandard: "Past", + }, + sandsearstorm: { + inherit: true, + isNonstandard: "Past", + }, + sandstorm: { + inherit: true, + pp: 5, + }, + scratch: { + inherit: true, + isNonstandard: "Past", + }, + secretsword: { + inherit: true, + isNonstandard: "Past", + }, + seedflare: { + inherit: true, + isNonstandard: "Past", + }, + shadowclaw: { + inherit: true, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 }, + }, + shadowforce: { + inherit: true, + isNonstandard: "Past", + }, + shelltrap: { + inherit: true, + pp: 10, + }, + shiftgear: { + inherit: true, + isNonstandard: "Past", + }, + shockwave: { + inherit: true, + isNonstandard: "Past", + }, + shoreup: { + inherit: true, + isNonstandard: "Past", + }, + silktrap: { + inherit: true, + isNonstandard: "Past", + }, + sketch: { + inherit: true, + isNonstandard: "Past", + }, + slam: { + inherit: true, + isNonstandard: "Past", + }, + slash: { + inherit: true, + isNonstandard: "Past", + }, + sludge: { + inherit: true, + isNonstandard: "Past", + }, + smog: { + inherit: true, + isNonstandard: "Past", + }, + smokescreen: { + inherit: true, + isNonstandard: "Past", + }, + snaptrap: { + inherit: true, + isNonstandard: null, + type: "Steel", + }, + snipeshot: { + inherit: true, + basePower: 85, + isNonstandard: "Past", + }, + snowscape: { + inherit: true, + pp: 5, + }, + spacialrend: { + inherit: true, + isNonstandard: "Past", + }, + spark: { + inherit: true, + isNonstandard: "Past", + }, + spikyshield: { + inherit: true, + pp: 5, + }, + spinout: { + inherit: true, + isNonstandard: "Past", + pp: 10, + }, + spiritbreak: { + inherit: true, + isNonstandard: "Past", + }, + spiritshackle: { + inherit: true, + basePower: 90, + }, + splash: { + inherit: true, + isNonstandard: "Past", + }, + springtidestorm: { + inherit: true, + isNonstandard: "Past", + }, + steameruption: { + inherit: true, + isNonstandard: "Past", + }, + stomp: { + inherit: true, + isNonstandard: "Past", + }, + stormthrow: { + inherit: true, + isNonstandard: null, + }, + strangesteam: { + inherit: true, + isNonstandard: "Past", + }, + strength: { + inherit: true, + isNonstandard: "Past", + }, + sunsteelstrike: { + inherit: true, + isNonstandard: "Past", + }, + supersonic: { + inherit: true, + isNonstandard: "Past", + }, + surgingstrikes: { + inherit: true, + isNonstandard: "Past", + }, + swift: { + inherit: true, + isNonstandard: "Past", + }, + syrupbomb: { + inherit: true, + accuracy: 90, + }, + tachyoncutter: { + inherit: true, + isNonstandard: "Past", + }, + tackle: { + inherit: true, + isNonstandard: "Past", + }, + tailglow: { + inherit: true, + isNonstandard: "Past", + }, + tailwhip: { + inherit: true, + isNonstandard: "Past", + }, + takedown: { + inherit: true, + isNonstandard: "Past", + }, + takeheart: { + inherit: true, + isNonstandard: "Past", + }, + tarshot: { + inherit: true, + isNonstandard: "Past", + }, + teleport: { + inherit: true, + isNonstandard: "Past", + }, + terablast: { + inherit: true, + isNonstandard: "Past", + }, + terastarstorm: { + inherit: true, + isNonstandard: "Past", + }, + thundercage: { + inherit: true, + isNonstandard: "Past", + }, + thunderclap: { + inherit: true, + isNonstandard: "Past", + }, + thunderouskick: { + inherit: true, + isNonstandard: "Past", + }, + thundershock: { + inherit: true, + isNonstandard: "Past", + }, + topsyturvy: { + inherit: true, + isNonstandard: "Past", + }, + toxicthread: { + inherit: true, + boosts: { + spe: -2, + }, + desc: "Lowers the target's Speed by 2 stages and poisons it.", + shortDesc: "Lowers the target's Speed by 2 and poisons it.", + }, + trickortreat: { + inherit: true, + isNonstandard: null, + }, + tripledive: { + inherit: true, + basePower: 35, + isNonstandard: "Past", + }, + triplekick: { + inherit: true, + isNonstandard: "Past", + }, + tropkick: { + inherit: true, + basePower: 85, + }, + twister: { + inherit: true, + isNonstandard: "Past", + }, + vcreate: { + inherit: true, + isNonstandard: "Past", + }, + victorydance: { + inherit: true, + isNonstandard: "Past", + }, + vinewhip: { + inherit: true, + isNonstandard: "Past", + }, + visegrip: { + inherit: true, + isNonstandard: "Past", + }, + watergun: { + inherit: true, + isNonstandard: "Past", + }, + waterpledge: { + inherit: true, + isNonstandard: "Past", + }, + wickedblow: { + inherit: true, + isNonstandard: "Past", + }, + wickedtorque: { + inherit: true, + isNonstandard: "Past", + }, + wildboltstorm: { + inherit: true, + isNonstandard: "Past", + }, + wingattack: { + inherit: true, + isNonstandard: "Past", + }, + withdraw: { + inherit: true, + isNonstandard: "Past", + }, + workup: { + inherit: true, + isNonstandard: "Past", + }, + zingzap: { + inherit: true, + isNonstandard: "Past", + }, +}; diff --git a/data/mods/champions/rulesets.ts b/data/mods/champions/rulesets.ts new file mode 100644 index 0000000000..db0aa83293 --- /dev/null +++ b/data/mods/champions/rulesets.ts @@ -0,0 +1,61 @@ +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { + standardag: { + inherit: true, + ruleset: [ + 'Obtainable', 'Team Preview', 'Cancel Mod', 'Endless Battle Clause', + 'Adjust Level = 50', 'Species Clause', 'Item Clause = 1', 'Min Team Size = 6', + ], + onBegin() { + this.reportPercentages = true; + }, + }, + standard: { + inherit: true, + ruleset: [ + 'Standard AG', + 'Sleep Moves Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Evasion Items Clause', + ], + }, + standarddraft: { + inherit: true, + ruleset: [ + 'Standard AG', + 'Nickname Clause', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause', + '!Item Clause', + ], + onBegin() { + this.reportPercentages = true; + }, + // timer: {starting: 60 * 60, grace: 0, addPerTurn: 10, maxPerTurn: 100, timeoutAutoChoose: true}, + }, + flatrules: { + inherit: true, + desc: "The in-game Flat Rules: Adjust Level 50, Species Clause, Item Clause = 1, -Mythical, -Restricted Legendary, Bring 6 Pick 3-6 depending on game type.", + ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level = 50', 'Picked Team Size = Auto', 'Min Team Size = 6', 'Cancel Mod'], + banlist: ['Mythical', 'Restricted Legendary'], + onBegin() { + this.reportPercentages = true; + }, + }, + teampreview: { + inherit: true, + onTeamPreview() { + this.add('clearpoke'); + for (const pokemon of this.getAllPokemon()) { + const details = pokemon.details.replace(/(Xerneas|Zacian|Zamazenta)(-[a-zA-Z?-]+)?/g, '$1-*'); + this.add('poke', pokemon.side.id, details, ''); + } + if (this.ruleTable.has(`teratypepreview`)) { + for (const side of this.sides) { + let buf = ``; + for (const pokemon of side.pokemon) { + buf += buf ? ` / ` : `raw|${side.name}'s Tera Types:
`; + buf += ``; + } + this.add(`${buf}`); + } + } + this.makeRequest('teampreview'); + }, + }, +}; diff --git a/data/mods/champions/scripts.ts b/data/mods/champions/scripts.ts new file mode 100644 index 0000000000..4eae371fde --- /dev/null +++ b/data/mods/champions/scripts.ts @@ -0,0 +1,425 @@ +export const Scripts: ModdedBattleScriptsData = { + gen: 9, + init() { + for (const i in this.data.Moves) { + if (this.data.Moves[i].pp > 20) { + this.modData('Moves', i).pp = 20; + } + } + }, + statModify(baseStats, set, statName) { + const tr = this.trunc; + let stat = baseStats[statName]; + const evs = set.evs[statName]; + if (statName === 'hp') { + return stat + evs + 75; + } + stat = stat + evs + 20; + const nature = this.dex.natures.get(set.nature); + // Natures are calculated with 16-bit truncation. + // This only affects Eternatus-Eternamax in Pure Hackmons. + if (nature.plus === statName) { + stat = this.ruleTable.has('overflowstatmod') ? Math.min(stat, 595) : stat; + stat = tr(tr(stat * 110, 16) / 100); + } else if (nature.minus === statName) { + stat = this.ruleTable.has('overflowstatmod') ? Math.min(stat, 728) : stat; + stat = tr(tr(stat * 90, 16) / 100); + } + return stat; + }, + calculatePP(move, ppUps) { + return move.noPPBoosts ? move.pp : (move.pp / 5 + 1) * 4; + }, + pokemon: { + // Remove Trick Room underflow + getActionSpeed() { + let speed = this.getStat('spe', false, false); + const trickRoomCheck = this.battle.ruleTable.has('twisteddimensionmod') ? + !this.battle.field.getPseudoWeather('trickroom') : this.battle.field.getPseudoWeather('trickroom'); + if (trickRoomCheck) { + speed = -speed; + } + return speed; + }, + // Don't revert Mega Evolutions after fainting + // TODO: confirm interaction with Revival Blessing + formeChange(speciesId, source, isPermanent, abilitySlot = '0', message) { + const rawSpecies = this.battle.dex.species.get(speciesId); + + const species = this.setSpecies(rawSpecies, source); + if (!species) return false; + + if (this.battle.gen <= 2) return true; + + // The species the opponent sees + const apparentSpecies = + this.illusion ? this.illusion.species.name : species.baseSpecies; + if (isPermanent) { + this.baseSpecies = rawSpecies; + this.details = this.getUpdatedDetails(); + let details = (this.illusion || this).details; + if (this.terastallized) details += `, tera:${this.terastallized}`; + this.battle.add('detailschange', this, details); + this.updateMaxHp(); + if (!source) { + // Tera forme + // Ogerpon/Terapagos text goes here + this.formeRegression = true; + } else if (source.effectType === 'Item') { + this.canTerastallize = null; // National Dex behavior + if (source.zMove) { + this.battle.add('-burst', this, apparentSpecies, species.requiredItem); + this.moveThisTurnResult = true; // Ultra Burst counts as an action for Truant + } else if (source.isPrimalOrb) { + if (this.illusion) { + this.ability = ''; + this.battle.add('-primal', this.illusion, species.requiredItem); + } else { + this.battle.add('-primal', this, species.requiredItem); + } + } else { + this.battle.add('-mega', this, apparentSpecies, species.requiredItem); + this.moveThisTurnResult = true; // Mega Evolution counts as an action for Truant + } + } else if (source.effectType === 'Status') { + // Shaymin-Sky -> Shaymin + this.battle.add('-formechange', this, species.name, message); + } + } else { + if (source?.effectType === 'Ability') { + this.battle.add('-formechange', this, species.name, message, `[from] ability: ${source.name}`); + } else { + this.battle.add('-formechange', this, this.illusion ? this.illusion.species.name : species.name, message); + } + } + if (isPermanent && (!source || !['disguise', 'iceface'].includes(source.id))) { + if (this.illusion && source) { + // Tera forme by Ogerpon or Terapagos breaks the Illusion + this.ability = ''; // Don't allow Illusion to wear off + } + const ability = species.abilities[abilitySlot] || species.abilities['0']; + // Ogerpon's forme change doesn't override permanent abilities + if (source || !this.getAbility().flags['cantsuppress']) this.setAbility(ability, null, null, true); + // However, its ability does reset upon switching out + this.baseAbility = this.battle.toID(ability); + } + if (this.terastallized) { + this.knownType = true; + this.apparentType = this.terastallized; + } + return true; + }, + // Announce status immunities from abilities without revealing the ability + // TODO: check if this happens to other abilities besides Spicy Spray (Static, Poison Touch, etc.) + setStatus(status, source, sourceEffect, ignoreImmunities) { + if (!this.hp) return false; + status = this.battle.dex.conditions.get(status); + if (this.battle.event) { + if (!source) source = this.battle.event.source; + if (!sourceEffect) sourceEffect = this.battle.effect; + } + if (!source) source = this; + + if (this.status === status.id) { + if ((sourceEffect as Move)?.status === this.status) { + this.battle.add('-fail', this, this.status); + } else if ((sourceEffect as Move)?.status) { + this.battle.add('-fail', source); + this.battle.attrLastMove('[still]'); + } + return false; + } + + if ( + !ignoreImmunities && status.id && !(source?.hasAbility('corrosion') && ['tox', 'psn'].includes(status.id)) + ) { + // the game currently never ignores immunities + if (!this.runStatusImmunity(status.id === 'tox' ? 'psn' : status.id)) { + this.battle.debug('immune to status'); + if ((sourceEffect as Move)?.status || sourceEffect?.effectType === 'Ability') { + this.battle.add('-immune', this); + } + return false; + } + } + const prevStatus = this.status; + const prevStatusState = this.statusState; + if (status.id) { + const result: boolean = this.battle.runEvent('SetStatus', this, source, sourceEffect, status); + if (!result) { + this.battle.debug('set status [' + status.id + '] interrupted'); + return result; + } + } + + this.status = status.id; + this.statusState = this.battle.initEffectState({ id: status.id, target: this }); + if (source) this.statusState.source = source; + if (status.duration) this.statusState.duration = status.duration; + if (status.durationCallback) { + this.statusState.duration = status.durationCallback.call(this.battle, this, source, sourceEffect); + } + + if (status.id && !this.battle.singleEvent('Start', status, this.statusState, this, source, sourceEffect)) { + this.battle.debug('status start [' + status.id + '] interrupted'); + // cancel the setstatus + this.status = prevStatus; + this.statusState = prevStatusState; + return false; + } + if (status.id && !this.battle.runEvent('AfterSetStatus', this, source, sourceEffect, status)) { + return false; + } + return true; + }, + }, + actions: { + canTerastallize(pokemon) { + return null; + }, + canMegaEvo(pokemon: Pokemon) { + const species = pokemon.baseSpecies; + const altForme = species.otherFormes && this.dex.species.get(species.otherFormes[0]); + const item = pokemon.getItem(); + // Mega Rayquaza + if ((this.battle.gen <= 7 || this.battle.ruleTable.has('+pokemontag:past') || + this.battle.ruleTable.has('+pokemontag:future')) && + altForme?.isMega && altForme?.requiredMove && + pokemon.baseMoves.includes(toID(altForme.requiredMove)) && !item.zMove) { + return altForme.name; + } + return item.megaStone?.[species.name] || null; + }, + // Announce 4x and 0.25x effectiveness + modifyDamage(baseDamage, pokemon, target, move, suppressMessages) { + const tr = this.battle.trunc; + if (!move.type) move.type = '???'; + const type = move.type; + + baseDamage += 2; + + if (move.spreadHit) { + // multi-target modifier (doubles only) + const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75; + this.battle.debug(`Spread modifier: ${spreadModifier}`); + baseDamage = this.battle.modify(baseDamage, spreadModifier); + } else if (move.multihitType === 'parentalbond' && move.hit > 1) { + // Parental Bond modifier + const bondModifier = this.battle.gen > 6 ? 0.25 : 0.5; + this.battle.debug(`Parental Bond modifier: ${bondModifier}`); + baseDamage = this.battle.modify(baseDamage, bondModifier); + } + + // weather modifier + baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage); + + // crit - not a modifier + const isCrit = target.getMoveHitData(move).crit; + if (isCrit) { + baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2))); + } + + // random factor - also not a modifier + baseDamage = this.battle.randomizer(baseDamage); + + // STAB + // The "???" type never gets STAB + // Not even if you Roost in Gen 4 and somehow manage to use + // Struggle in the same turn. + // (On second thought, it might be easier to get a MissingNo.) + if (type !== '???') { + let stab: number | [number, number] = 1; + + const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type); + if (isSTAB) { + stab = 1.5; + } + + // The Stellar tera type makes this incredibly confusing + // If the move's type does not match one of the user's base types, + // the Stellar tera type applies a one-time 1.2x damage boost for that type. + // + // If the move's type does match one of the user's base types, + // then the Stellar tera type applies a one-time 2x STAB boost for that type, + // and then goes back to using the regular 1.5x STAB boost for those types. + if (pokemon.terastallized === 'Stellar') { + if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) { + stab = isSTAB ? 2 : [4915, 4096]; + move.stellarBoosted = true; + if (pokemon.species.name !== 'Terapagos-Stellar') { + pokemon.stellarBoostedTypes.push(type); + } + } + } else { + if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) { + stab = 2; + } + stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab); + } + + baseDamage = this.battle.modify(baseDamage, stab); + } + + // types + let typeMod = target.runEffectiveness(move); + typeMod = this.battle.clampIntRange(typeMod, -6, 6); + target.getMoveHitData(move).typeMod = typeMod; + if (typeMod > 0) { + if (!suppressMessages) this.battle.add('-supereffective', target, Math.min(typeMod, 2)); + + for (let i = 0; i < typeMod; i++) { + baseDamage *= 2; + } + } + if (typeMod < 0) { + if (!suppressMessages) this.battle.add('-resisted', target, Math.min(-typeMod, 2)); + + for (let i = 0; i > typeMod; i--) { + baseDamage = tr(baseDamage / 2); + } + } + + if (isCrit && !suppressMessages) this.battle.add('-crit', target); + + if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) { + if (this.battle.gen < 6 || move.id !== 'facade') { + baseDamage = this.battle.modify(baseDamage, 0.5); + } + } + + // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers + if (this.battle.gen === 5 && !baseDamage) baseDamage = 1; + + // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb. + baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage); + + const bypassProtect = target.getMoveHitData(move).bypassProtect; + if (bypassProtect) { + baseDamage = this.battle.modify(baseDamage, 0.25); + if (bypassProtect !== true && bypassProtect.effectType === 'Ability') { + this.battle.add('-ability', pokemon, bypassProtect.name); + } + this.battle.add('-zbroken', target); + } + + // Generation 6-7 moves the check for minimum 1 damage after the final modifier... + if (this.battle.gen !== 5 && !baseDamage) return 1; + + // ...but 16-bit truncation happens even later, and can truncate to 0 + return tr(baseDamage, 16); + }, + // Run `AfterHit` events even if the source fainted + spreadMoveHit(targets, pokemon, moveOrMoveName, hitEffect?, isSecondary?, isSelf?) { + // Hardcoded for single-target purposes + // (no spread moves have any kind of onTryHit handler) + const target = targets[0]; + let damage: (number | boolean | undefined)[] = []; + for (const i of targets.keys()) { + damage[i] = true; + } + const move = this.dex.getActiveMove(moveOrMoveName); + let hitResult: boolean | number | null = true; + let moveData = hitEffect!; + if (!moveData) moveData = move; + if (!moveData.flags) moveData.flags = {}; + if (move.target === 'all' && !isSelf) { + hitResult = this.battle.singleEvent('TryHitField', moveData, {}, target || null, pokemon, move); + } else if ((move.target === 'foeSide' || move.target === 'allySide' || move.target === 'allyTeam') && !isSelf) { + hitResult = this.battle.singleEvent('TryHitSide', moveData, {}, target || null, pokemon, move); + } else if (target) { + hitResult = this.battle.singleEvent('TryHit', moveData, {}, target, pokemon, move); + } + if (!hitResult) { + if (hitResult === false) { + this.battle.add('-fail', pokemon); + this.battle.attrLastMove('[still]'); + } + return [[false], targets]; // single-target only + } + + // 0. check for substitute + if (!isSecondary && !isSelf) { + if (move.target !== 'all' && move.target !== 'allyTeam' && move.target !== 'allySide' && move.target !== 'foeSide') { + damage = this.tryPrimaryHitEvent(damage, targets, pokemon, move, moveData, isSecondary); + } + } + + for (const i of targets.keys()) { + if (damage[i] === this.battle.HIT_SUBSTITUTE) { + damage[i] = true; + targets[i] = null; + } + if (targets[i] && isSecondary && !moveData.self) { + damage[i] = true; + } + if (!damage[i]) targets[i] = false; + } + // 1. call to this.battle.getDamage + damage = this.getSpreadDamage(damage, targets, pokemon, move, moveData, isSecondary, isSelf); + + for (const i of targets.keys()) { + if (damage[i] === false) targets[i] = false; + } + + // 2. call to this.battle.spreadDamage + damage = this.battle.spreadDamage(damage, targets, pokemon, move); + + for (const i of targets.keys()) { + if (damage[i] === false) targets[i] = false; + } + + // 3. onHit event happens here + damage = this.runMoveEffects(damage, targets, pokemon, move, moveData, isSecondary, isSelf); + + for (const i of targets.keys()) { + if (!damage[i] && damage[i] !== 0) targets[i] = false; + } + + // steps 4 and 5 can mess with this.battle.activeTarget, which needs to be preserved for Dancer + const activeTarget = this.battle.activeTarget; + + // 4. self drops (start checking for targets[i] === false here) + if (moveData.self && !move.selfDropped) this.selfDrops(targets, pokemon, move, moveData, isSecondary); + + // 5. secondary effects + if (moveData.secondaries) this.secondaries(targets, pokemon, move, moveData, isSelf); + + this.battle.activeTarget = activeTarget; + + // 6. force switch + if (moveData.forceSwitch) damage = this.forceSwitch(damage, targets, pokemon, move); + + for (const i of targets.keys()) { + if (!damage[i] && damage[i] !== 0) targets[i] = false; + } + + const damagedTargets: Pokemon[] = []; + const damagedDamage = []; + for (const [i, t] of targets.entries()) { + if (typeof damage[i] === 'number' && t) { + damagedTargets.push(t); + damagedDamage.push(damage[i]); + } + } + const pokemonOriginalHP = pokemon.hp; + if (damagedDamage.length && !isSecondary && !isSelf) { + if (this.battle.gen >= 5) { + this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage); + } + if (moveData.onAfterHit) { + for (const t of damagedTargets) { + this.battle.singleEvent('AfterHit', moveData, {}, t, pokemon, move); + } + } + if (this.battle.gen < 5) { + this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage); + } + if (pokemon.hp && pokemon.hp <= pokemon.maxhp / 2 && pokemonOriginalHP > pokemon.maxhp / 2) { + this.battle.runEvent('EmergencyExit', pokemon); + } + } + + return [damage, targets]; + }, + }, +}; diff --git a/data/mods/chatbats/abilities.ts b/data/mods/chatbats/abilities.ts index e2039820ce..8428dd5885 100644 --- a/data/mods/chatbats/abilities.ts +++ b/data/mods/chatbats/abilities.ts @@ -1,993 +1,993 @@ -export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { - thickfat: { - // prevents burning - inherit: true, - onUpdate(pokemon) { - if (pokemon.status === 'brn') { - this.add('-activate', pokemon, 'ability: Thick Fat'); - pokemon.cureStatus(); - } - }, - onSetStatus(status, target, source, effect) { - if (status.id !== 'brn') return; - if ((effect as Move)?.status) { - this.add('-immune', target, '[from] ability: Thick Fat'); - } - return false; - }, - shortDesc: "-50% damage from Fire and Ice. Burn immune.", - }, - callillumise: { - onDamagePriority: -30, - onDamage(damage, target, source, effect) { - if (damage >= target.hp) { - this.add('-ability', target, 'Call Illumise'); - this.effectState.callillumise = true; - return target.hp - 1; - } - }, - onUpdate(pokemon) { - if (!this.effectState.callillumise) return; - - this.add('-message', `Volbeat calls upon Illumise for aid!`); - // Define new moves - const newMoves = ['bugbuzz', 'icebeam', 'thunderbolt', 'quiverdance']; - // Update move slots - pokemon.moveSlots = newMoves.map(move => { - const moveData = this.dex.moves.get(move); - return { - move: moveData.name, - id: moveData.id, - pp: moveData.pp, - maxpp: moveData.pp, - target: moveData.target, - disabled: false, - used: false, - }; - }); - // this forces the UI to update move slots visually - (pokemon as any).baseMoveSlots = pokemon.moveSlots.slice(); - // removes status/boosts - pokemon.cureStatus(); - pokemon.clearBoosts(); - // forces the UI to update part II - this.add('-clearboost', pokemon, '[from] ability: Call Illumise', '[silent]'); - for (const volatile in pokemon.volatiles) { - this.add('-end', pokemon, volatile); - } - pokemon.clearVolatile(true); - // form change + heal - pokemon.formeChange('Illumise', null, true); - this.heal(pokemon.maxhp); - // sets new ability - pokemon.setAbility('Tinted Lens', null, null, true); - pokemon.baseAbility = pokemon.ability; - this.add('-ability', pokemon, 'Tinted Lens'); - }, - flags: { - breakable: 1, failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1, - }, - name: "Call Illumise", - rating: 5, - num: -100, - shortDesc: "When Volbeat gets low on HP, it calls Illumise for aid.", - }, - callvolbeat: { - onDamagePriority: -30, - onDamage(damage, target, source, effect) { - if (damage >= target.hp) { - this.add('-ability', target, 'Call Volbeat'); - this.effectState.callvolbeat = true; - return target.hp - 1; - } - }, - onUpdate(pokemon) { - if (!this.effectState.callvolbeat) return; - - this.add('-message', `Illumise calls upon Volbeat for aid!`); - // Define new moves - const newMoves = ['victorydance', 'lunge', 'mightycleave', 'earthquake']; - // Update move slots - pokemon.moveSlots = newMoves.map(move => { - const moveData = this.dex.moves.get(move); - return { - move: moveData.name, - id: moveData.id, - pp: moveData.pp, - maxpp: moveData.pp, - target: moveData.target, - disabled: false, - used: false, - }; - }); - // this forces the UI to update move slots visually - (pokemon as any).baseMoveSlots = pokemon.moveSlots.slice(); - // removes status/boosts - pokemon.cureStatus(); - pokemon.clearBoosts(); - // forces the UI to update part II - this.add('-clearboost', pokemon, '[from] ability: Call Volbeat', '[silent]'); - for (const volatile in pokemon.volatiles) { - this.add('-end', pokemon, volatile); - } - pokemon.clearVolatile(true); - // form change + heal - pokemon.formeChange('Volbeat', null, true); - this.heal(pokemon.maxhp); - // sets new ability - pokemon.setAbility('Dancer', null, null, true); - pokemon.baseAbility = pokemon.ability; - this.add('-ability', pokemon, 'Dancer'); - }, - flags: { - breakable: 1, failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1, - }, - name: "Call Volbeat", - rating: 5, - num: -101, - shortDesc: "When Illumise gets low on HP, it calls Volbeat for aid.", - }, - shortfuse: { - onDamagePriority: -30, - onDamage(damage, target, source, effect) { - if (damage >= target.hp) { - this.add('-ability', target, 'Short Fuse'); - this.effectState.shortfuse = true; - return target.hp - 1; - } - }, - onUpdate(pokemon) { - if (this.effectState.shortfuse) { - delete this.effectState.shortfuse; - this.actions.useMove('explosion', pokemon); - } - this.checkFainted(); - }, - flags: { - breakable: 1, failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, - }, - name: "Short Fuse", - rating: 5, - num: -102, - shortDesc: "If KO'd, use Explosion instead.", - }, - hydroelectricdam: { - // Copied from the code for Sand Spit - onDamagingHit(damage, target, source, move) { - this.field.setWeather('raindance'); - }, - flags: {}, - name: "Hydroelectric Dam", - rating: 5, - num: -103, - shortDesc: "Starts Rain Dance when hit by an attack.", - }, - frozenarmor: { - onTryHit(target, source, move) { - if (move.category !== 'Status') { - this.add('-ability', target, 'Frozen Armor'); - // reduces base power of incoming moves by 20 (math.max prevents base power from reducing below 0) - move.basePower = Math.max(move.basePower - 20, 0); - } - }, - onSwitchInPriority: -1, - onUpdate(pokemon) { - // checks if Glastrier is below 50% HP, if so transforms into Caly-Ice and sets ability to As One - if (pokemon.species.id !== 'glastrier' || !pokemon.hp) return; - if (pokemon.hp < pokemon.maxhp / 2) { - if (pokemon.species.id !== 'calyrexice' && pokemon.ability === 'frozenarmor') { - pokemon.formeChange('Calyrex-Ice', null, true); - this.add('-message', `Glastrier's Frozen Armor has shattered!`); - // pokemon.setAbility('As One (Glastrier)'); - pokemon.baseAbility = pokemon.ability; - // this.add('-ability', pokemon, 'As One'); - } - } - }, - flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1 }, - name: "Frozen Armor", - rating: 5, - num: -105, - shortDesc: "-20 BP on attacks targeting Glastrier, at 50% HP become Calyrex-Ice.", - }, - flipflop: { - onDamagingHitOrder: 1, - onTryHit(target, source, move) { - if (move.flags['contact']) { - let flipFlopBoosts = false; - const invertedBoosts: SparseBoostsTable = {}; - for (const stat in source.boosts) { - if (source.boosts[stat as BoostID] > 0) { - // checks for boosts on source of move, inverts boosts and adds them to invertedBoosts table - invertedBoosts[stat as BoostID] = -2 * source.boosts[stat as BoostID]; - if (!flipFlopBoosts) { - this.add('-ability', target, 'Flip Flop'); - flipFlopBoosts = true; - } - } - } - // applies boosts - this.boost(invertedBoosts, source, target); - } - }, - flags: {}, - name: "Flip Flop", - rating: 5, - num: -104, - shortDesc: "When hit by contact move, invert attacker’s stat boosts.", - }, - - grasspelt: { - inherit: true, - onDamagingHit(damage, target, source, move) { - this.field.setTerrain('grassyterrain'); - }, - shortDesc: "Starts Grassy Terrain on hit. 1.5x Def in Grassy Terrain.", - }, - aquaveil: { - onSwitchInPriority: -1, - // fakes the effect of aqua ring volatile lel - onStart(pokemon) { - this.add('-start', pokemon, 'Aqua Ring'); - }, - // provides effects of Water Bubble because Aqua Ring is modified to provide Water Bubble. - onResidualOrder: 6, - onResidual(pokemon) { - this.heal(pokemon.baseMaxhp / 16); - }, - onSourceModifyAtkPriority: 5, - onSourceModifyAtk(atk, attacker, defender, move) { - if (move.type === 'Fire') { - return this.chainModify(0.5); - } - }, - onSourceModifySpAPriority: 5, - onSourceModifySpA(atk, attacker, defender, move) { - if (move.type === 'Fire') { - return this.chainModify(0.5); - } - }, - onModifyAtk(atk, attacker, defender, move) { - if (move.type === 'Water') { - return this.chainModify(2); - } - }, - onModifySpA(atk, attacker, defender, move) { - if (move.type === 'Water') { - return this.chainModify(2); - } - }, - // this ability is supposed to just add Aqua Ring (the volatile) to the Pokemon on switch in - flags: { cantsuppress: 1 }, - name: "Aqua Veil", - rating: 5, - num: -106, - shortDesc: "Starts Aqua Ring on switch in.", - }, - // unaware + water absorb - stillwater: { - onAnyModifyBoost(boosts, pokemon) { - const unawareUser = this.effectState.target; - if (unawareUser === pokemon) return; - if (unawareUser === this.activePokemon && pokemon === this.activeTarget) { - boosts['def'] = 0; - boosts['spd'] = 0; - boosts['evasion'] = 0; - } - if (pokemon === this.activePokemon && unawareUser === this.activeTarget) { - boosts['atk'] = 0; - boosts['def'] = 0; - boosts['spa'] = 0; - boosts['accuracy'] = 0; - } - }, - onTryHit(target, source, move) { - if (target !== source && move.type === 'Water') { - if (!this.heal(target.baseMaxhp / 4)) { - this.add('-immune', target, '[from] ability: Still Water'); - } - return null; - } - }, - flags: { breakable: 1 }, - name: "Still Water", - rating: 5, - num: -107, - shortDesc: "Unaware + Water Absorb", - }, - kingofthehill: { - // sharpness + mountaineer + prevents hazard immunity - onDamage(damage, target, source, effect) { - if (effect && effect.id === 'stealthrock') { - return false; - } - }, - onTryHit(target, source, move) { - if (move.type === 'Rock' && !target.activeTurns) { - this.add('-immune', target, '[from] ability: King of the Hill'); - return null; - } - }, - // sharpness - onBasePowerPriority: 19, - onBasePower(basePower, attacker, defender, move) { - if (move.flags['slicing']) { - this.debug('Sharpness boost'); - return this.chainModify(1.5); - } - }, - // starts side condition for foes, side condition interacts with hazard effects - onStart(pokemon) { - this.add('-ability', pokemon, 'King of the Hill'); - for (const side of pokemon.side.foeSidesWithConditions()) { - side.addSideCondition('kingofthehill'); - } - }, - onEnd(pokemon) { - for (const side of pokemon.side.foeSidesWithConditions()) { - if (side.getSideCondition('kingofthehill')) { - side.removeSideCondition('kingofthehill'); - } - } - }, - condition: {}, - flags: { breakable: 1 }, - name: "King of the Hill", - rating: 5, - num: -108, - shortDesc: "Mountaineer + Sharpness. Opponent cannot ignore hazard damage.", - }, - // stockpile on hit - omnivore: { - onDamagingHitOrder: 1, - onDamagingHit(damage, target, source, move) { - if (!target.hp) return; - this.add('-activate', target, 'ability: Omnivore'); - target.addVolatile('stockpile'); - }, - flags: {}, - name: "Omnivore", - rating: 5, - num: -109, - shortDesc: "Gain Stockpile charge when hit by attack.", - }, - // disguise clone - pseudowoodo: { - onDamagePriority: 1, - onDamage(damage, target, source, effect) { - if (effect?.effectType === 'Move' && ['sudowoodo'].includes(target.species.id)) { - this.add('-activate', target, 'ability: Pseudowoodo'); - this.effectState.rock = true; - return 0; - } - }, - onCriticalHit(target, source, move) { - if (!target) return; - if (!['sudowoodo'].includes(target.species.id)) { - return; - } - const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); - if (hitSub) return; - - if (!target.runImmunity(move.type)) return; - return false; - }, - onEffectiveness(typeMod, target, type, move) { - if (!target || move.category === 'Status') return; - if (!['sudowoodo'].includes(target.species.id)) { - return; - } - - const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); - if (hitSub) return; - - if (!target.runImmunity(move.type)) return; - return 0; - }, - onUpdate(pokemon) { - if (['sudowoodo'].includes(pokemon.species.id) && this.effectState.rock) { - const speciesid = 'Sudowoodo-Rock'; - pokemon.formeChange(speciesid, this.effect, true); - this.damage(pokemon.baseMaxhp / 8, pokemon, pokemon, this.dex.species.get(speciesid)); - } - }, - flags: { - failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, - breakable: 1, notransform: 1, - }, - name: "Pseudowoodo", - rating: 5, - num: -110, - shortDesc: "Disguise. Becomes Rock type when it breaks.", - }, - magicguard: { - onDamage(damage, target, source, effect) { - // prevents magic guard from blocking hazard damage while King of the Hill is active - if (target.side.getSideCondition('kingofthehill')) { - const hazards = ['stealthrock', 'spikes', 'toxicspikes', 'stickyweb']; - if (effect && hazards.includes(effect.id)) { - return; - } - } - if (effect.effectType !== 'Move') { - if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); - return false; - } - }, - flags: {}, - name: "Magic Guard", - rating: 4, - num: 98, - }, - disguise: { - onDamagePriority: 1, - onDamage(damage, target, source, effect) { - if (effect?.effectType === 'Move' && ['mimikyu', 'mimikyutotem'].includes(target.species.id)) { - this.add('-activate', target, 'ability: Disguise'); - this.effectState.busted = true; - return 0; - } - }, - onCriticalHit(target, source, move) { - if (!target) return; - if (!['mimikyu', 'mimikyutotem'].includes(target.species.id)) { - return; - } - const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); - if (hitSub) return; - - if (!target.runImmunity(move.type)) return; - return false; - }, - onEffectiveness(typeMod, target, type, move) { - if (!target || move.category === 'Status') return; - if (!['mimikyu', 'mimikyutotem'].includes(target.species.id)) { - return; - } - - const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); - if (hitSub) return; - - if (!target.runImmunity(move.type)) return; - return 0; - }, - onUpdate(pokemon) { - if (['mimikyu', 'mimikyutotem'].includes(pokemon.species.id) && this.effectState.busted) { - const speciesid = pokemon.species.id === 'mimikyutotem' ? 'Mimikyu-Busted-Totem' : 'Mimikyu-Busted'; - pokemon.formeChange(speciesid, this.effect, true); - this.damage(pokemon.baseMaxhp / 8, pokemon, pokemon, this.dex.species.get(speciesid)); - } - // sets ability to perish body - if (pokemon.species.id === 'mimikyubusted' && pokemon.ability === 'disguise') { - pokemon.setAbility("Perish Body"); - pokemon.baseAbility = pokemon.ability; - } - }, - // cantsuppress flag removed to allow for ability change - flags: { - failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, - breakable: 1, notransform: 1, - }, - name: "Disguise", - rating: 3.5, - num: 209, - }, - gulpmissile: { - inherit: true, - onTryHit(target, source, move) { - // Storm Drain effect while cramorant-gulping - if (target !== source && move.type === 'Water' && target.species.id === 'cramorantgulping') { - if (!this.boost({ spa: 1 })) { - this.add('-immune', target, '[from] ability: Gulp Missile'); - } - return null; - } - // Lightning Rod effect while cramorant-gorging - if (target !== source && move.type === 'Electric' && target.species.id === 'cramorantgorging') { - if (!this.boost({ spa: 1 })) { - this.add('-immune', target, '[from] ability: Gulp Missile'); - } - return null; - } - return; - }, - }, - asoneglastrier: { - inherit: true, - // removing these flags allows Frozen Armor to correctly set Caly-Ice ability as As One - flags: {}, - }, - protean: { - inherit: true, - onPrepareHit(source, target, move) { - if (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch' || move.callsMove) return; - const type = move.type; - if (type && type !== '???' && source.getTypes().join() !== type) { - if (!source.setType(type)) return; - this.add('-start', source, 'typechange', type, '[from] ability: Protean'); - } - }, - rating: 4.5, - shortDesc: "Gen 8 Protean.", - }, - berserk: { - onUpdate(pokemon) { - if (pokemon.species.id !== 'infernape' || !pokemon.hp || pokemon.m.triggeredBerserk) return; - if (pokemon.hp < pokemon.maxhp / 2) { - this.boost({ spa: 1 }, pokemon, pokemon); - pokemon.m.triggeredBerserk = true; - } - }, - flags: {}, - name: "Berserk", - rating: 2, - num: 201, - }, - bloodsoakedcrescent: { - // modifies atk - onStart(pokemon) { - this.add('-ability', pokemon, 'Blood-Soaked Crescent'); - }, - onModifyAtkPriority: 1, - onModifyAtk(atk, pokemon) { - if (pokemon.volatiles['dynamax']) return; - this.debug('bsc Attack boost'); - return this.chainModify(1.5); - }, - // ends move lock properly - onAfterMove(pokemon) { - if (pokemon.volatiles['bloodsoakedcrescent']?.duration === 1) { - pokemon.removeVolatile('bloodsoakedcrescent'); - this.add('-end', pokemon, 'Blood-Soaked Rage'); - } - }, - // applies move lock - onAfterMoveSecondarySelf(pokemon, source, move) { - if (move.id === 'dragondance') return; - if (!pokemon.volatiles['bloodsoakedcrescent']) { - this.add('-start', pokemon, 'Blood-Soaked Rage'); - } - pokemon.addVolatile('bloodsoakedcrescent'); - }, - // condition is just lockedmove with some changes - condition: { - // Outrage, Thrash, Petal Dance... - duration: 2, - onResidual(target) { - if (target.status === 'slp') { - // don't lock, and bypass confusion for calming - delete target.volatiles['bloodsoakedcrescent']; - } - this.effectState.trueDuration--; - }, - onStart(target, source, effect) { - this.effectState.trueDuration = this.random(2, 4); - this.effectState.move = this.activeMove; - }, - onRestart() { - if (this.effectState.trueDuration >= 2) { - this.effectState.duration = 2; - } - }, - onEnd(target) { - if (this.effectState.trueDuration > 1) return; - target.addVolatile('confusion'); - }, - onLockMove(pokemon) { - if (pokemon.volatiles['dynamax']) return; - return this.effectState.move; - }, - }, - flags: {}, - name: "Blood-Soaked Crescent", - rating: 5, - num: -111, - shortDesc: "1.5x Attack, but attacks have the Outrage effect.", - }, - powerspot: { - onChargeMove(pokemon, target, move) { - this.debug('power spot - remove charge turn for ' + move.id); - this.attrLastMove('[still]'); - this.addMove('-anim', pokemon, move.name, target); - return false; // skip charge turn - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - if (pokemon.getVolatile('mustrecharge')) { - pokemon.removeVolatile('mustrecharge'); - this.add('-end', pokemon, 'mustrecharge'); - } - }, - flags: {}, - name: "Power Spot", - rating: 5, - num: 249, - shortDesc: "Moves ignore charge/recharge turns.", - }, - biogenesis: { - onSwitchInPriority: -1, - onBeforeSwitchIn(pokemon) { - if (pokemon.m.didRandomMoves) return; - const moves = this.dex.moves.all(); - const newMoves = []; - while (newMoves.length < 8) { - const newMove = this.sample(moves); - if (newMove.basePower === 1) continue; - if (newMove.isMax === true) continue; - if (newMove.isNonstandard === "Gigantamax") continue; - if (newMoves.map(x => x.id).includes(newMove.id)) continue; - newMoves.push(newMove); - } - // Update move slots - pokemon.moveSlots = newMoves.map(move => { - const moveData = this.dex.moves.get(move); - return { - move: moveData.name, - id: moveData.id, - pp: moveData.pp, - maxpp: moveData.pp, - target: moveData.target, - disabled: false, - used: false, - }; - }); - // this forces the UI to update move slots visually - (pokemon as any).baseMoveSlots = pokemon.moveSlots.slice(); - pokemon.m.didRandomMoves = true; - }, - onSwitchIn(pokemon) { - if (!pokemon) return; // Chat command - if (!pokemon.m.hasTypeChanged) { - this.add('-ability', pokemon, 'Biogenesis'); - this.add('-anim', pokemon, 'Growth', pokemon); - this.add('-message', `Mew evolves into a new form with its Biogenesis!`); - } - const attackingMoves = pokemon.baseMoveSlots - .map(slot => this.dex.moves.get(slot.id)) - .filter(move => move.category !== "Status"); - - // pick types of first 2 attacking moves (failsafe if there are none) - const types = attackingMoves.length ? - [...new Set(attackingMoves.slice(0, 2).map(move => move.type))] : - pokemon.types; - pokemon.setType(types); - pokemon.baseTypes = pokemon.types; - pokemon.m.hasTypeChanged = true; - this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]'); - }, - flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, - breakable: 1, notransform: 1, cantsuppress: 1 }, - name: "Biogenesis", - rating: 5, - num: -112, - shortDesc: "This Pokemon receives 8 completely random moves at the start of the game.", - }, - orichalcumpulse: { - onStart(pokemon) { - pokemon.updateMaxHp(); - if (this.field.setWeather('sunnyday')) { - this.add('-activate', pokemon, 'Orichalcum Pulse', '[source]'); - } else if (this.field.isWeather('sunnyday')) { - this.add('-activate', pokemon, 'ability: Orichalcum Pulse'); - } - }, - onModifyAtkPriority: 5, - onModifyAtk(atk, pokemon) { - if (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) { - this.debug('Orichalcum boost'); - return this.chainModify([5461, 4096]); - } - }, - flags: {}, - name: "Orichalcum Pulse", - rating: 4.5, - num: 288, - }, - hailmary: { - onStart(pokemon) { - this.add('-activate', pokemon, 'ability: Hail Mary'); - }, - onModifySpe(spe, pokemon) { - if (this.field.isWeather(['hail', 'snowscape'])) { - this.debug('hail mary spe boost'); - return this.chainModify(2); - } - }, - onModifyAtkPriority: 5, - onModifyAtk(atk, pokemon) { - if (this.field.isWeather(['hail', 'snowscape'])) { - this.debug('hail mary atk boost'); - return this.chainModify(1.5); - } - }, - onSourceModifyAccuracyPriority: -1, - onSourceModifyAccuracy(accuracy, target, source, move) { - if (this.field.isWeather(['hail', 'snowscape'])) { - if (move.category === 'Physical' && typeof accuracy === 'number') { - return this.chainModify([3277, 4096]); - } - } - }, - flags: {}, - name: "Hail Mary", - rating: 5, - num: -113, - shortDesc: "In Snowscape: 2x Speed, 1.5x Attack, 0.8x accuracy.", - }, - brainfreeze: { - onModifyCritRatio(critRatio, source, target) { - if (target && (target.status === 'frostbite' || this.field.isWeather('snowscape'))) return 5; - }, - flags: {}, - name: "Brain Freeze", - rating: 5, - num: -114, - shortDesc: "If Snowscape or target is Frostbitten, attacks auto Crit.", - }, - neutralizinggas: { - inherit: true, - onStart(pokemon) { - // this makes Neutralizing Gas properly show as activated in the client when Typhlosion Mega evolves - this.add('-ability', pokemon, 'Neutralizing Gas'); - }, - }, - terawheel: { - onStart(pokemon) { - pokemon.canTerastallize = null; - }, - // copied from SSB High Performance Computing - onResidualOrder: 6, - onResidual(source) { - const type = this.sample(this.dex.types.names().filter(i => i !== source.getTypes()[0])); - if (source.setType(type)) { - this.add('-start', source, 'typechange', type, '[from] ability: Tera Wheel'); - } - }, - flags: {}, - name: "Tera Wheel", - rating: 5, - num: -115, - shortDesc: "End of turn: this Pokemon switches to a random type (including Stellar).", - }, - download: { - inherit: true, - onUpdate(pokemon) { - if (pokemon.species.name === 'Genesect-Burn' && pokemon.terastallized) { - pokemon.setAbility('Drought', null, null, true); - pokemon.baseAbility = pokemon.ability; - this.add('-ability', pokemon, 'Drought'); - } - if (pokemon.species.name === 'Genesect-Chill' && pokemon.terastallized) { - pokemon.setAbility('Snow Warning', null, null, true); - pokemon.baseAbility = pokemon.ability; - this.add('-ability', pokemon, 'Snow Warning'); - } - if (pokemon.species.name === 'Genesect-Douse' && pokemon.terastallized) { - pokemon.setAbility('Drizzle', null, null, true); - pokemon.baseAbility = pokemon.ability; - this.add('-ability', pokemon, 'Drizzle'); - } - if (pokemon.species.name === 'Genesect-Shock' && pokemon.terastallized) { - pokemon.setAbility('Electric Surge', null, null, true); - pokemon.baseAbility = pokemon.ability; - this.add('-ability', pokemon, 'Electric Surge'); - } - }, - shortDesc: "Download + Gets weather setting move when Tera.", - }, - battlerage: { - onDamagingHit(damage, target, source, effect) { - this.boost({ atk: 1 }); - }, - flags: {}, - name: "Battle Rage", - rating: 5, - num: -116, - shortDesc: "+1 Atk when hit by an attack.", - }, - terrainshift: { - onStart(source) { - if (source.hp >= source.maxhp) { - source.setType("Electric"); - this.field.setTerrain('electricterrain'); - this.add('-start', source, 'typechange', 'Electric', '[silent]'); - } else if (source.hp >= (2 * source.maxhp) / 3) { - source.setType("Fairy"); - this.field.setTerrain('mistyterrain'); - this.add('-start', source, 'typechange', 'Fairy', '[silent]'); - } else if (source.hp >= source.maxhp / 3) { - source.setType("Grass"); - this.field.setTerrain('grassyterrain'); - this.add('-start', source, 'typechange', 'Grass', '[silent]'); - } else { - source.setType("Psychic"); - this.field.setTerrain('psychicterrain'); - this.add('-start', source, 'typechange', 'Psychic', '[silent]'); - } - }, - flags: {}, - name: "Terrain Shift", - rating: 5, - num: -117, - shortDesc: "Sets terrain depending on HP value.", - }, - dragonsjaw: { - onBasePower(basePower, attacker, defender, move) { - if (defender.hasType('Dragon') && defender.hasType('Steel')) { - return this.chainModify(1.5); - } else if (defender.hasType('Dragon')) { - return this.chainModify(2.25); - } else if (defender.hasType('Steel')) { - return; - } else return this.chainModify(1.5); - }, - onTryHit(target, source, move) { - if (target.hasType('Fairy')) { - return null; - } - }, - onModifyMovePriority: -2, - onModifyMove(move) { - if (move.secondaries) { - this.debug('doubling secondary chance'); - for (const secondary of move.secondaries) { - if (secondary.chance) secondary.chance *= 2; - } - } - if (move.self?.chance) move.self.chance *= 2; - }, - flags: {}, - name: "Dragon's Jaw", - rating: 5, - num: -118, - shortDesc: "Serene Grace + Bite attacks are Dragon type.", - }, - corrosivesoul: { - onStart(source) { - this.field.setTerrain('corrosivesoul'); - }, - condition: { - effectType: 'Terrain', - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - this.add('-fieldstart', 'move: Corrosive Soul', '[from] ability: ' + effect.name, `[of] ${source}`); - } else { - this.add('-fieldstart', 'move: Corrosive Soul'); - } - }, - onResidualOrder: 5, - onResidualSubOrder: 2, - onResidual(pokemon) { - const move = this.dex.getActiveMove('smog'); - move.accuracy = 100; - const target = pokemon.foes()[0]; - if (target && !target.fainted) { - this.actions.useMove(move, pokemon, { target }); - } - }, - onFieldResidualOrder: 27, - onFieldResidualSubOrder: 7, - onFieldEnd() { - this.add('-fieldend', 'move: Corrosive Soul'); - }, - }, - flags: {}, - name: "Corrosive Soul", - rating: 5, - num: -119, - shortDesc: "Sets Corrosive Terrian: active Pokemon hit each other with Smog.", - }, - oceanicblessing: { - onSwitchInPriority: -2, - onStart(pokemon) { - this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon); - }, - onWeatherChange(pokemon) { - if (!pokemon.isActive || pokemon.baseSpecies.baseSpecies !== 'Kyogre' || pokemon.transformed) return; - if (!pokemon.hp) return; - if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { - if (pokemon.species.id !== 'kyogreprimal') { - pokemon.formeChange('Kyogre-Primal', this.effect, false); - } - } else { - if (pokemon.species.id === 'kyogreprimal') { - pokemon.formeChange('kyogre', this.effect, false); - } - } - }, - onAllyModifyAtkPriority: 3, - onAllyModifyAtk(atk, pokemon) { - if (this.effectState.target.baseSpecies.baseSpecies !== 'Kyogre') return; - if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { - return this.chainModify(1.5); - } - }, - onAllyModifySpDPriority: 4, - onAllyModifySpD(spd, pokemon) { - if (this.effectState.target.baseSpecies.baseSpecies !== 'Kyogre') return; - if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { - return this.chainModify(1.5); - } - }, - flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, breakable: 1 }, - name: "Oceanic Blessing", - rating: 5, - num: -120, - shortDesc: "Flower Gift but Kyogre", - }, - autospin: { - onResidual(pokemon, s, effect) { - const move = this.dex.getActiveMove('metronome'); - const target = pokemon.foes()[0]; - if (target && !target.fainted && (pokemon.hp >= pokemon.maxhp / 2)) { - this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); - } else if (target && !target.fainted && (pokemon.hp <= pokemon.maxhp / 10)) { - this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); - this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); - this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); - } else if (target && !target.fainted) { - this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); - this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); - } - }, - flags: {}, - name: "Auto Spin", - rating: 5, - num: -121, - shortDesc: "Use Metronome at end of turn.", - }, - corrosion: { - inherit: true, - onModifyMovePriority: -5, - onModifyMove(move) { - if (!move.ignoreImmunity) move.ignoreImmunity = {}; - if (move.ignoreImmunity !== true) { - move.ignoreImmunity['Poison'] = true; - } - }, - shortDesc: "This Pokemon can poison a Pokemon regardless of its typing and hit them with Poison moves.", - }, - jellobody: { - onTryHit(pokemon, target, move) { - if (move.selfSwitch) { - this.add('-immune', pokemon, '[from] ability: Jello Body'); - this.heal(target.baseMaxhp / 2); - return null; - } - }, - onModifyMove(move, source, target) { - move.drain = [1, 2]; - }, - flags: { breakable: 1 }, - name: "Jello Body", - rating: 5, - num: -122, - shortDesc: "Immune to pivot moves, heals 50% HP when hit by one. All moves drain 50%.", - }, - nibblenibble: { - onPrepareHit(source, target, move) { - if (move.category === 'Status' || move.multihit || move.flags['noparentalbond'] || move.flags['charge'] || - move.flags['futuremove'] || move.spreadHit || move.isZ || move.isMax || !move.flags['bite']) return; - move.multihit = 2; - move.multihitType = 'parentalbond'; - }, - // Damage modifier implemented in BattleActions#modifyDamage() - onSourceModifySecondaries(secondaries, target, source, move) { - if (move.multihitType === 'parentalbond' && move.id === 'secretpower' && move.hit < 2) { - // hack to prevent accidentally suppressing King's Rock/Razor Fang - return secondaries.filter(effect => effect.volatileStatus === 'flinch'); - } - }, - flags: {}, - name: "Nibble Nibble", - rating: 5, - num: -123, - shortDesc: "Parental Bond but for Bite moves.", - }, -}; +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + thickfat: { + // prevents burning + inherit: true, + onUpdate(pokemon) { + if (pokemon.status === 'brn') { + this.add('-activate', pokemon, 'ability: Thick Fat'); + pokemon.cureStatus(); + } + }, + onSetStatus(status, target, source, effect) { + if (status.id !== 'brn') return; + if ((effect as Move)?.status) { + this.add('-immune', target, '[from] ability: Thick Fat'); + } + return false; + }, + shortDesc: "-50% damage from Fire and Ice. Burn immune.", + }, + callillumise: { + onDamagePriority: -30, + onDamage(damage, target, source, effect) { + if (damage >= target.hp) { + this.add('-ability', target, 'Call Illumise'); + this.effectState.callillumise = true; + return target.hp - 1; + } + }, + onUpdate(pokemon) { + if (!this.effectState.callillumise) return; + + this.add('-message', `Volbeat calls upon Illumise for aid!`); + // Define new moves + const newMoves = ['bugbuzz', 'icebeam', 'thunderbolt', 'quiverdance']; + // Update move slots + pokemon.moveSlots = newMoves.map(move => { + const moveData = this.dex.moves.get(move); + return { + move: moveData.name, + id: moveData.id, + pp: moveData.pp, + maxpp: moveData.pp, + target: moveData.target, + disabled: false, + used: false, + }; + }); + // this forces the UI to update move slots visually + (pokemon as any).baseMoveSlots = pokemon.moveSlots.slice(); + // removes status/boosts + pokemon.cureStatus(); + pokemon.clearBoosts(); + // forces the UI to update part II + this.add('-clearboost', pokemon, '[from] ability: Call Illumise', '[silent]'); + for (const volatile in pokemon.volatiles) { + this.add('-end', pokemon, volatile); + } + pokemon.clearVolatile(true); + // form change + heal + pokemon.formeChange('Illumise', null, true); + this.heal(pokemon.maxhp); + // sets new ability + pokemon.setAbility('Tinted Lens', null, null, true); + pokemon.baseAbility = pokemon.ability; + this.add('-ability', pokemon, 'Tinted Lens'); + }, + flags: { + breakable: 1, failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1, + }, + name: "Call Illumise", + rating: 5, + num: -100, + shortDesc: "When Volbeat gets low on HP, it calls Illumise for aid.", + }, + callvolbeat: { + onDamagePriority: -30, + onDamage(damage, target, source, effect) { + if (damage >= target.hp) { + this.add('-ability', target, 'Call Volbeat'); + this.effectState.callvolbeat = true; + return target.hp - 1; + } + }, + onUpdate(pokemon) { + if (!this.effectState.callvolbeat) return; + + this.add('-message', `Illumise calls upon Volbeat for aid!`); + // Define new moves + const newMoves = ['victorydance', 'lunge', 'mightycleave', 'earthquake']; + // Update move slots + pokemon.moveSlots = newMoves.map(move => { + const moveData = this.dex.moves.get(move); + return { + move: moveData.name, + id: moveData.id, + pp: moveData.pp, + maxpp: moveData.pp, + target: moveData.target, + disabled: false, + used: false, + }; + }); + // this forces the UI to update move slots visually + (pokemon as any).baseMoveSlots = pokemon.moveSlots.slice(); + // removes status/boosts + pokemon.cureStatus(); + pokemon.clearBoosts(); + // forces the UI to update part II + this.add('-clearboost', pokemon, '[from] ability: Call Volbeat', '[silent]'); + for (const volatile in pokemon.volatiles) { + this.add('-end', pokemon, volatile); + } + pokemon.clearVolatile(true); + // form change + heal + pokemon.formeChange('Volbeat', null, true); + this.heal(pokemon.maxhp); + // sets new ability + pokemon.setAbility('Dancer', null, null, true); + pokemon.baseAbility = pokemon.ability; + this.add('-ability', pokemon, 'Dancer'); + }, + flags: { + breakable: 1, failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1, + }, + name: "Call Volbeat", + rating: 5, + num: -101, + shortDesc: "When Illumise gets low on HP, it calls Volbeat for aid.", + }, + shortfuse: { + onDamagePriority: -30, + onDamage(damage, target, source, effect) { + if (damage >= target.hp) { + this.add('-ability', target, 'Short Fuse'); + this.effectState.shortfuse = true; + return target.hp - 1; + } + }, + onUpdate(pokemon) { + if (this.effectState.shortfuse) { + delete this.effectState.shortfuse; + this.actions.useMove('explosion', pokemon); + } + this.checkFainted(); + }, + flags: { + breakable: 1, failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, + }, + name: "Short Fuse", + rating: 5, + num: -102, + shortDesc: "If KO'd, use Explosion instead.", + }, + hydroelectricdam: { + // Copied from the code for Sand Spit + onDamagingHit(damage, target, source, move) { + this.field.setWeather('raindance'); + }, + flags: {}, + name: "Hydroelectric Dam", + rating: 5, + num: -103, + shortDesc: "Starts Rain Dance when hit by an attack.", + }, + frozenarmor: { + onTryHit(target, source, move) { + if (move.category !== 'Status') { + this.add('-ability', target, 'Frozen Armor'); + // reduces base power of incoming moves by 20 (math.max prevents base power from reducing below 0) + move.basePower = Math.max(move.basePower - 20, 0); + } + }, + onSwitchInPriority: -1, + onUpdate(pokemon) { + // checks if Glastrier is below 50% HP, if so transforms into Caly-Ice and sets ability to As One + if (pokemon.species.id !== 'glastrier' || !pokemon.hp) return; + if (pokemon.hp < pokemon.maxhp / 2) { + if (pokemon.species.id !== 'calyrexice' && pokemon.ability === 'frozenarmor') { + pokemon.formeChange('Calyrex-Ice', null, true); + this.add('-message', `Glastrier's Frozen Armor has shattered!`); + // pokemon.setAbility('As One (Glastrier)'); + pokemon.baseAbility = pokemon.ability; + // this.add('-ability', pokemon, 'As One'); + } + } + }, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1 }, + name: "Frozen Armor", + rating: 5, + num: -105, + shortDesc: "-20 BP on attacks targeting Glastrier, at 50% HP become Calyrex-Ice.", + }, + flipflop: { + onDamagingHitOrder: 1, + onTryHit(target, source, move) { + if (move.flags['contact']) { + let flipFlopBoosts = false; + const invertedBoosts: SparseBoostsTable = {}; + for (const stat in source.boosts) { + if (source.boosts[stat as BoostID] > 0) { + // checks for boosts on source of move, inverts boosts and adds them to invertedBoosts table + invertedBoosts[stat as BoostID] = -2 * source.boosts[stat as BoostID]; + if (!flipFlopBoosts) { + this.add('-ability', target, 'Flip Flop'); + flipFlopBoosts = true; + } + } + } + // applies boosts + this.boost(invertedBoosts, source, target); + } + }, + flags: {}, + name: "Flip Flop", + rating: 5, + num: -104, + shortDesc: "When hit by contact move, invert attacker’s stat boosts.", + }, + + grasspelt: { + inherit: true, + onDamagingHit(damage, target, source, move) { + this.field.setTerrain('grassyterrain'); + }, + shortDesc: "Starts Grassy Terrain on hit. 1.5x Def in Grassy Terrain.", + }, + aquaveil: { + onSwitchInPriority: -1, + // fakes the effect of aqua ring volatile lel + onStart(pokemon) { + this.add('-start', pokemon, 'Aqua Ring'); + }, + // provides effects of Water Bubble because Aqua Ring is modified to provide Water Bubble. + onResidualOrder: 6, + onResidual(pokemon) { + this.heal(pokemon.baseMaxhp / 16); + }, + onSourceModifyAtkPriority: 5, + onSourceModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Fire') { + return this.chainModify(0.5); + } + }, + onSourceModifySpAPriority: 5, + onSourceModifySpA(atk, attacker, defender, move) { + if (move.type === 'Fire') { + return this.chainModify(0.5); + } + }, + onModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Water') { + return this.chainModify(2); + } + }, + onModifySpA(atk, attacker, defender, move) { + if (move.type === 'Water') { + return this.chainModify(2); + } + }, + // this ability is supposed to just add Aqua Ring (the volatile) to the Pokemon on switch in + flags: { cantsuppress: 1 }, + name: "Aqua Veil", + rating: 5, + num: -106, + shortDesc: "Starts Aqua Ring on switch in.", + }, + // unaware + water absorb + stillwater: { + onAnyModifyBoost(boosts, pokemon) { + const unawareUser = this.effectState.target; + if (unawareUser === pokemon) return; + if (unawareUser === this.activePokemon && pokemon === this.activeTarget) { + boosts['def'] = 0; + boosts['spd'] = 0; + boosts['evasion'] = 0; + } + if (pokemon === this.activePokemon && unawareUser === this.activeTarget) { + boosts['atk'] = 0; + boosts['def'] = 0; + boosts['spa'] = 0; + boosts['accuracy'] = 0; + } + }, + onTryHit(target, source, move) { + if (target !== source && move.type === 'Water') { + if (!this.heal(target.baseMaxhp / 4)) { + this.add('-immune', target, '[from] ability: Still Water'); + } + return null; + } + }, + flags: { breakable: 1 }, + name: "Still Water", + rating: 5, + num: -107, + shortDesc: "Unaware + Water Absorb", + }, + kingofthehill: { + // sharpness + mountaineer + prevents hazard immunity + onDamage(damage, target, source, effect) { + if (effect && effect.id === 'stealthrock') { + return false; + } + }, + onTryHit(target, source, move) { + if (move.type === 'Rock' && !target.activeTurns) { + this.add('-immune', target, '[from] ability: King of the Hill'); + return null; + } + }, + // sharpness + onBasePowerPriority: 19, + onBasePower(basePower, attacker, defender, move) { + if (move.flags['slicing']) { + this.debug('Sharpness boost'); + return this.chainModify(1.5); + } + }, + // starts side condition for foes, side condition interacts with hazard effects + onStart(pokemon) { + this.add('-ability', pokemon, 'King of the Hill'); + for (const side of pokemon.side.foeSidesWithConditions()) { + side.addSideCondition('kingofthehill'); + } + }, + onEnd(pokemon) { + for (const side of pokemon.side.foeSidesWithConditions()) { + if (side.getSideCondition('kingofthehill')) { + side.removeSideCondition('kingofthehill'); + } + } + }, + condition: {}, + flags: { breakable: 1 }, + name: "King of the Hill", + rating: 5, + num: -108, + shortDesc: "Mountaineer + Sharpness. Opponent cannot ignore hazard damage.", + }, + // stockpile on hit + omnivore: { + onDamagingHitOrder: 1, + onDamagingHit(damage, target, source, move) { + if (!target.hp) return; + this.add('-activate', target, 'ability: Omnivore'); + target.addVolatile('stockpile'); + }, + flags: {}, + name: "Omnivore", + rating: 5, + num: -109, + shortDesc: "Gain Stockpile charge when hit by attack.", + }, + // disguise clone + pseudowoodo: { + onDamagePriority: 1, + onDamage(damage, target, source, effect) { + if (effect?.effectType === 'Move' && ['sudowoodo'].includes(target.species.id)) { + this.add('-activate', target, 'ability: Pseudowoodo'); + this.effectState.rock = true; + return 0; + } + }, + onCriticalHit(target, source, move) { + if (!target) return; + if (!['sudowoodo'].includes(target.species.id)) { + return; + } + const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); + if (hitSub) return; + + if (!target.runImmunity(move.type)) return; + return false; + }, + onEffectiveness(typeMod, target, type, move) { + if (!target || move.category === 'Status') return; + if (!['sudowoodo'].includes(target.species.id)) { + return; + } + + const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); + if (hitSub) return; + + if (!target.runImmunity(move.type)) return; + return 0; + }, + onUpdate(pokemon) { + if (['sudowoodo'].includes(pokemon.species.id) && this.effectState.rock) { + const speciesid = 'Sudowoodo-Rock'; + pokemon.formeChange(speciesid, this.effect, true); + this.damage(pokemon.baseMaxhp / 8, pokemon, pokemon, this.dex.species.get(speciesid)); + } + }, + flags: { + failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, + breakable: 1, notransform: 1, + }, + name: "Pseudowoodo", + rating: 5, + num: -110, + shortDesc: "Disguise. Becomes Rock type when it breaks.", + }, + magicguard: { + onDamage(damage, target, source, effect) { + // prevents magic guard from blocking hazard damage while King of the Hill is active + if (target.side.getSideCondition('kingofthehill')) { + const hazards = ['stealthrock', 'spikes', 'toxicspikes', 'stickyweb']; + if (effect && hazards.includes(effect.id)) { + return; + } + } + if (effect.effectType !== 'Move') { + if (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name); + return false; + } + }, + flags: {}, + name: "Magic Guard", + rating: 4, + num: 98, + }, + disguise: { + onDamagePriority: 1, + onDamage(damage, target, source, effect) { + if (effect?.effectType === 'Move' && ['mimikyu', 'mimikyutotem'].includes(target.species.id)) { + this.add('-activate', target, 'ability: Disguise'); + this.effectState.busted = true; + return 0; + } + }, + onCriticalHit(target, source, move) { + if (!target) return; + if (!['mimikyu', 'mimikyutotem'].includes(target.species.id)) { + return; + } + const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); + if (hitSub) return; + + if (!target.runImmunity(move.type)) return; + return false; + }, + onEffectiveness(typeMod, target, type, move) { + if (!target || move.category === 'Status') return; + if (!['mimikyu', 'mimikyutotem'].includes(target.species.id)) { + return; + } + + const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); + if (hitSub) return; + + if (!target.runImmunity(move.type)) return; + return 0; + }, + onUpdate(pokemon) { + if (['mimikyu', 'mimikyutotem'].includes(pokemon.species.id) && this.effectState.busted) { + const speciesid = pokemon.species.id === 'mimikyutotem' ? 'Mimikyu-Busted-Totem' : 'Mimikyu-Busted'; + pokemon.formeChange(speciesid, this.effect, true); + this.damage(pokemon.baseMaxhp / 8, pokemon, pokemon, this.dex.species.get(speciesid)); + } + // sets ability to perish body + if (pokemon.species.id === 'mimikyubusted' && pokemon.ability === 'disguise') { + pokemon.setAbility("Perish Body"); + pokemon.baseAbility = pokemon.ability; + } + }, + // cantsuppress flag removed to allow for ability change + flags: { + failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, + breakable: 1, notransform: 1, + }, + name: "Disguise", + rating: 3.5, + num: 209, + }, + gulpmissile: { + inherit: true, + onTryHit(target, source, move) { + // Storm Drain effect while cramorant-gulping + if (target !== source && move.type === 'Water' && target.species.id === 'cramorantgulping') { + if (!this.boost({ spa: 1 })) { + this.add('-immune', target, '[from] ability: Gulp Missile'); + } + return null; + } + // Lightning Rod effect while cramorant-gorging + if (target !== source && move.type === 'Electric' && target.species.id === 'cramorantgorging') { + if (!this.boost({ spa: 1 })) { + this.add('-immune', target, '[from] ability: Gulp Missile'); + } + return null; + } + return; + }, + }, + asoneglastrier: { + inherit: true, + // removing these flags allows Frozen Armor to correctly set Caly-Ice ability as As One + flags: {}, + }, + protean: { + inherit: true, + onPrepareHit(source, target, move) { + if (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch' || move.callsMove) return; + const type = move.type; + if (type && type !== '???' && source.getTypes().join() !== type) { + if (!source.setType(type)) return; + this.add('-start', source, 'typechange', type, '[from] ability: Protean'); + } + }, + rating: 4.5, + shortDesc: "Gen 8 Protean.", + }, + berserk: { + onUpdate(pokemon) { + if (pokemon.species.id !== 'infernape' || !pokemon.hp || pokemon.m.triggeredBerserk) return; + if (pokemon.hp < pokemon.maxhp / 2) { + this.boost({ spa: 1 }, pokemon, pokemon); + pokemon.m.triggeredBerserk = true; + } + }, + flags: {}, + name: "Berserk", + rating: 2, + num: 201, + }, + bloodsoakedcrescent: { + // modifies atk + onStart(pokemon) { + this.add('-ability', pokemon, 'Blood-Soaked Crescent'); + }, + onModifyAtkPriority: 1, + onModifyAtk(atk, pokemon) { + if (pokemon.volatiles['dynamax']) return; + this.debug('bsc Attack boost'); + return this.chainModify(1.5); + }, + // ends move lock properly + onAfterMove(pokemon) { + if (pokemon.volatiles['bloodsoakedcrescent']?.duration === 1) { + pokemon.removeVolatile('bloodsoakedcrescent'); + this.add('-end', pokemon, 'Blood-Soaked Rage'); + } + }, + // applies move lock + onAfterMoveSecondarySelf(pokemon, source, move) { + if (move.id === 'dragondance') return; + if (!pokemon.volatiles['bloodsoakedcrescent']) { + this.add('-start', pokemon, 'Blood-Soaked Rage'); + } + pokemon.addVolatile('bloodsoakedcrescent'); + }, + // condition is just lockedmove with some changes + condition: { + // Outrage, Thrash, Petal Dance... + duration: 2, + onResidual(target) { + if (target.status === 'slp') { + // don't lock, and bypass confusion for calming + delete target.volatiles['bloodsoakedcrescent']; + } + this.effectState.trueDuration--; + }, + onStart(target, source, effect) { + this.effectState.trueDuration = this.random(2, 4); + this.effectState.move = this.activeMove; + }, + onRestart() { + if (this.effectState.trueDuration >= 2) { + this.effectState.duration = 2; + } + }, + onEnd(target) { + if (this.effectState.trueDuration > 1) return; + target.addVolatile('confusion'); + }, + onLockMove(pokemon) { + if (pokemon.volatiles['dynamax']) return; + return this.effectState.move; + }, + }, + flags: {}, + name: "Blood-Soaked Crescent", + rating: 5, + num: -111, + shortDesc: "1.5x Attack, but attacks have the Outrage effect.", + }, + powerspot: { + onChargeMove(pokemon, target, move) { + this.debug('power spot - remove charge turn for ' + move.id); + this.attrLastMove('[still]'); + this.addMove('-anim', pokemon, move.name, target); + return false; // skip charge turn + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (pokemon.getVolatile('mustrecharge')) { + pokemon.removeVolatile('mustrecharge'); + this.add('-end', pokemon, 'mustrecharge'); + } + }, + flags: {}, + name: "Power Spot", + rating: 5, + num: 249, + shortDesc: "Moves ignore charge/recharge turns.", + }, + biogenesis: { + onSwitchInPriority: -1, + onBeforeSwitchIn(pokemon) { + if (pokemon.m.didRandomMoves) return; + const moves = this.dex.moves.all(); + const newMoves = []; + while (newMoves.length < 8) { + const newMove = this.sample(moves); + if (newMove.basePower === 1) continue; + if (newMove.isMax === true) continue; + if (newMove.isNonstandard === "Gigantamax") continue; + if (newMoves.map(x => x.id).includes(newMove.id)) continue; + newMoves.push(newMove); + } + // Update move slots + pokemon.moveSlots = newMoves.map(move => { + const moveData = this.dex.moves.get(move); + return { + move: moveData.name, + id: moveData.id, + pp: moveData.pp, + maxpp: moveData.pp, + target: moveData.target, + disabled: false, + used: false, + }; + }); + // this forces the UI to update move slots visually + (pokemon as any).baseMoveSlots = pokemon.moveSlots.slice(); + pokemon.m.didRandomMoves = true; + }, + onSwitchIn(pokemon) { + if (!pokemon) return; // Chat command + if (!pokemon.m.hasTypeChanged) { + this.add('-ability', pokemon, 'Biogenesis'); + this.add('-anim', pokemon, 'Growth', pokemon); + this.add('-message', `Mew evolves into a new form with its Biogenesis!`); + } + const attackingMoves = pokemon.baseMoveSlots + .map(slot => this.dex.moves.get(slot.id)) + .filter(move => move.category !== "Status"); + + // pick types of first 2 attacking moves (failsafe if there are none) + const types = attackingMoves.length ? + [...new Set(attackingMoves.slice(0, 2).map(move => move.type))] : + pokemon.types; + pokemon.setType(types); + pokemon.baseTypes = pokemon.types; + pokemon.m.hasTypeChanged = true; + this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]'); + }, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, + breakable: 1, notransform: 1, cantsuppress: 1 }, + name: "Biogenesis", + rating: 5, + num: -112, + shortDesc: "This Pokemon receives 8 completely random moves at the start of the game.", + }, + orichalcumpulse: { + onStart(pokemon) { + pokemon.updateMaxHp(); + if (this.field.setWeather('sunnyday')) { + this.add('-activate', pokemon, 'Orichalcum Pulse', '[source]'); + } else if (this.field.isWeather('sunnyday')) { + this.add('-activate', pokemon, 'ability: Orichalcum Pulse'); + } + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, pokemon) { + if (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) { + this.debug('Orichalcum boost'); + return this.chainModify([5461, 4096]); + } + }, + flags: {}, + name: "Orichalcum Pulse", + rating: 4.5, + num: 288, + }, + hailmary: { + onStart(pokemon) { + this.add('-activate', pokemon, 'ability: Hail Mary'); + }, + onModifySpe(spe, pokemon) { + if (this.field.isWeather(['hail', 'snowscape'])) { + this.debug('hail mary spe boost'); + return this.chainModify(2); + } + }, + onModifyAtkPriority: 5, + onModifyAtk(atk, pokemon) { + if (this.field.isWeather(['hail', 'snowscape'])) { + this.debug('hail mary atk boost'); + return this.chainModify(1.5); + } + }, + onSourceModifyAccuracyPriority: -1, + onSourceModifyAccuracy(accuracy, target, source, move) { + if (this.field.isWeather(['hail', 'snowscape'])) { + if (move.category === 'Physical' && typeof accuracy === 'number') { + return this.chainModify([3277, 4096]); + } + } + }, + flags: {}, + name: "Hail Mary", + rating: 5, + num: -113, + shortDesc: "In Snowscape: 2x Speed, 1.5x Attack, 0.8x accuracy.", + }, + brainfreeze: { + onModifyCritRatio(critRatio, source, target) { + if (target && (target.status === 'frostbite' || this.field.isWeather('snowscape'))) return 5; + }, + flags: {}, + name: "Brain Freeze", + rating: 5, + num: -114, + shortDesc: "If Snowscape or target is Frostbitten, attacks auto Crit.", + }, + neutralizinggas: { + inherit: true, + onStart(pokemon) { + // this makes Neutralizing Gas properly show as activated in the client when Typhlosion Mega evolves + this.add('-ability', pokemon, 'Neutralizing Gas'); + }, + }, + terawheel: { + onStart(pokemon) { + pokemon.canTerastallize = null; + }, + // copied from SSB High Performance Computing + onResidualOrder: 6, + onResidual(source) { + const type = this.sample(this.dex.types.names().filter(i => i !== source.getTypes()[0])); + if (source.setType(type)) { + this.add('-start', source, 'typechange', type, '[from] ability: Tera Wheel'); + } + }, + flags: {}, + name: "Tera Wheel", + rating: 5, + num: -115, + shortDesc: "End of turn: this Pokemon switches to a random type (including Stellar).", + }, + download: { + inherit: true, + onUpdate(pokemon) { + if (pokemon.species.name === 'Genesect-Burn' && pokemon.terastallized) { + pokemon.setAbility('Drought', null, null, true); + pokemon.baseAbility = pokemon.ability; + this.add('-ability', pokemon, 'Drought'); + } + if (pokemon.species.name === 'Genesect-Chill' && pokemon.terastallized) { + pokemon.setAbility('Snow Warning', null, null, true); + pokemon.baseAbility = pokemon.ability; + this.add('-ability', pokemon, 'Snow Warning'); + } + if (pokemon.species.name === 'Genesect-Douse' && pokemon.terastallized) { + pokemon.setAbility('Drizzle', null, null, true); + pokemon.baseAbility = pokemon.ability; + this.add('-ability', pokemon, 'Drizzle'); + } + if (pokemon.species.name === 'Genesect-Shock' && pokemon.terastallized) { + pokemon.setAbility('Electric Surge', null, null, true); + pokemon.baseAbility = pokemon.ability; + this.add('-ability', pokemon, 'Electric Surge'); + } + }, + shortDesc: "Download + Gets weather setting move when Tera.", + }, + battlerage: { + onDamagingHit(damage, target, source, effect) { + this.boost({ atk: 1 }); + }, + flags: {}, + name: "Battle Rage", + rating: 5, + num: -116, + shortDesc: "+1 Atk when hit by an attack.", + }, + terrainshift: { + onStart(source) { + if (source.hp >= source.maxhp) { + source.setType("Electric"); + this.field.setTerrain('electricterrain'); + this.add('-start', source, 'typechange', 'Electric', '[silent]'); + } else if (source.hp >= (2 * source.maxhp) / 3) { + source.setType("Fairy"); + this.field.setTerrain('mistyterrain'); + this.add('-start', source, 'typechange', 'Fairy', '[silent]'); + } else if (source.hp >= source.maxhp / 3) { + source.setType("Grass"); + this.field.setTerrain('grassyterrain'); + this.add('-start', source, 'typechange', 'Grass', '[silent]'); + } else { + source.setType("Psychic"); + this.field.setTerrain('psychicterrain'); + this.add('-start', source, 'typechange', 'Psychic', '[silent]'); + } + }, + flags: {}, + name: "Terrain Shift", + rating: 5, + num: -117, + shortDesc: "Sets terrain depending on HP value.", + }, + dragonsjaw: { + onBasePower(basePower, attacker, defender, move) { + if (defender.hasType('Dragon') && defender.hasType('Steel')) { + return this.chainModify(1.5); + } else if (defender.hasType('Dragon')) { + return this.chainModify(2.25); + } else if (defender.hasType('Steel')) { + return; + } else return this.chainModify(1.5); + }, + onTryHit(target, source, move) { + if (target.hasType('Fairy')) { + return null; + } + }, + onModifyMovePriority: -2, + onModifyMove(move) { + if (move.secondaries) { + this.debug('doubling secondary chance'); + for (const secondary of move.secondaries) { + if (secondary.chance) secondary.chance *= 2; + } + } + if (move.self?.chance) move.self.chance *= 2; + }, + flags: {}, + name: "Dragon's Jaw", + rating: 5, + num: -118, + shortDesc: "Serene Grace + Bite attacks are Dragon type.", + }, + corrosivesoul: { + onStart(source) { + this.field.setTerrain('corrosivesoul'); + }, + condition: { + effectType: 'Terrain', + duration: 5, + durationCallback(source, effect) { + if (source?.hasItem('terrainextender')) { + return 8; + } + return 5; + }, + onFieldStart(field, source, effect) { + if (effect?.effectType === 'Ability') { + this.add('-fieldstart', 'move: Corrosive Soul', '[from] ability: ' + effect.name, `[of] ${source}`); + } else { + this.add('-fieldstart', 'move: Corrosive Soul'); + } + }, + onResidualOrder: 5, + onResidualSubOrder: 2, + onResidual(pokemon) { + const move = this.dex.getActiveMove('smog'); + move.accuracy = 100; + const target = pokemon.foes()[0]; + if (target && !target.fainted) { + this.actions.useMove(move, pokemon, { target }); + } + }, + onFieldResidualOrder: 27, + onFieldResidualSubOrder: 7, + onFieldEnd() { + this.add('-fieldend', 'move: Corrosive Soul'); + }, + }, + flags: {}, + name: "Corrosive Soul", + rating: 5, + num: -119, + shortDesc: "Sets Corrosive Terrian: active Pokemon hit each other with Smog.", + }, + oceanicblessing: { + onSwitchInPriority: -2, + onStart(pokemon) { + this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon); + }, + onWeatherChange(pokemon) { + if (!pokemon.isActive || pokemon.baseSpecies.baseSpecies !== 'Kyogre' || pokemon.transformed) return; + if (!pokemon.hp) return; + if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { + if (pokemon.species.id !== 'kyogreprimal') { + pokemon.formeChange('Kyogre-Primal', this.effect, false); + } + } else { + if (pokemon.species.id === 'kyogreprimal') { + pokemon.formeChange('kyogre', this.effect, false); + } + } + }, + onAllyModifyAtkPriority: 3, + onAllyModifyAtk(atk, pokemon) { + if (this.effectState.target.baseSpecies.baseSpecies !== 'Kyogre') return; + if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { + return this.chainModify(1.5); + } + }, + onAllyModifySpDPriority: 4, + onAllyModifySpD(spd, pokemon) { + if (this.effectState.target.baseSpecies.baseSpecies !== 'Kyogre') return; + if (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) { + return this.chainModify(1.5); + } + }, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, breakable: 1 }, + name: "Oceanic Blessing", + rating: 5, + num: -120, + shortDesc: "Flower Gift but Kyogre", + }, + autospin: { + onResidual(pokemon, s, effect) { + const move = this.dex.getActiveMove('metronome'); + const target = pokemon.foes()[0]; + if (target && !target.fainted && (pokemon.hp >= pokemon.maxhp / 2)) { + this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); + } else if (target && !target.fainted && (pokemon.hp <= pokemon.maxhp / 10)) { + this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); + this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); + this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); + } else if (target && !target.fainted) { + this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); + this.actions.useMove(move, pokemon, { target, sourceEffect: effect }); + } + }, + flags: {}, + name: "Auto Spin", + rating: 5, + num: -121, + shortDesc: "Use Metronome at end of turn.", + }, + corrosion: { + inherit: true, + onModifyMovePriority: -5, + onModifyMove(move) { + if (!move.ignoreImmunity) move.ignoreImmunity = {}; + if (move.ignoreImmunity !== true) { + move.ignoreImmunity['Poison'] = true; + } + }, + shortDesc: "This Pokemon can poison a Pokemon regardless of its typing and hit them with Poison moves.", + }, + jellobody: { + onTryHit(pokemon, target, move) { + if (move.selfSwitch) { + this.add('-immune', pokemon, '[from] ability: Jello Body'); + this.heal(target.baseMaxhp / 2); + return null; + } + }, + onModifyMove(move, source, target) { + move.drain = [1, 2]; + }, + flags: { breakable: 1 }, + name: "Jello Body", + rating: 5, + num: -122, + shortDesc: "Immune to pivot moves, heals 50% HP when hit by one. All moves drain 50%.", + }, + nibblenibble: { + onPrepareHit(source, target, move) { + if (move.category === 'Status' || move.multihit || move.flags['noparentalbond'] || move.flags['charge'] || + move.flags['futuremove'] || move.spreadHit || move.isZ || move.isMax || !move.flags['bite']) return; + move.multihit = 2; + move.multihitType = 'parentalbond'; + }, + // Damage modifier implemented in BattleActions#modifyDamage() + onSourceModifySecondaries(secondaries, target, source, move) { + if (move.multihitType === 'parentalbond' && move.id === 'secretpower' && move.hit < 2) { + // hack to prevent accidentally suppressing King's Rock/Razor Fang + return secondaries.filter(effect => effect.volatileStatus === 'flinch'); + } + }, + flags: {}, + name: "Nibble Nibble", + rating: 5, + num: -123, + shortDesc: "Parental Bond but for Bite moves.", + }, +}; diff --git a/data/mods/chatbats/conditions.ts b/data/mods/chatbats/conditions.ts index e0df9258fd..a82de056fc 100644 --- a/data/mods/chatbats/conditions.ts +++ b/data/mods/chatbats/conditions.ts @@ -1,20 +1,20 @@ -export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { - frostbite: { - name: 'frostbite', - effectType: 'Status', - onStart(target) { - this.add('-start', target, 'Frostbite', '[silent]'); - this.add('-message', `${target.species.name} is inflicted with frostbite!`); - }, - onSwitchIn(pokemon) { - this.add('-start', pokemon, 'Frostbite', '[silent]'); - }, - onResidualOrder: 10, - onResidual(pokemon) { - this.damage(pokemon.baseMaxhp / 16); - }, - onBasePower(basePower, source, target) { - return basePower / 2; - }, - }, -}; +export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { + frostbite: { + name: 'frostbite', + effectType: 'Status', + onStart(target) { + this.add('-start', target, 'Frostbite', '[silent]'); + this.add('-message', `${target.species.name} is inflicted with frostbite!`); + }, + onSwitchIn(pokemon) { + this.add('-start', pokemon, 'Frostbite', '[silent]'); + }, + onResidualOrder: 10, + onResidual(pokemon) { + this.damage(pokemon.baseMaxhp / 16); + }, + onBasePower(basePower, source, target) { + return basePower / 2; + }, + }, +}; diff --git a/data/mods/chatbats/items.ts b/data/mods/chatbats/items.ts index a88b72957d..9db85d9364 100644 --- a/data/mods/chatbats/items.ts +++ b/data/mods/chatbats/items.ts @@ -1,150 +1,150 @@ -export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { - bigroot: { - inherit: true, - onTryHealPriority: 1, - onTryHeal(damage, target, source, effect) { - const heals = ['drain', 'leechseed', 'ingrain', 'aquaring', 'strengthsap']; - if (heals.includes(effect.id)) { - return this.chainModify([6144, 4096]); - } - }, - shortDesc: "Holder gains 1.5x HP from draining, Aqua Ring, Ingrain, Leech Seed, Strength Sap.", - }, - masquerainite: { - name: "Masquerainite", - spritenum: 1, - megaStone: { "Masquerain": "Masquerain-Mega" }, - itemUser: ["Masquerain"], - onTakeItem(item, source) { - return !item.megaStone?.[source.baseSpecies.baseSpecies]; - }, - num: -1, - gen: 9, - desc: "If held by a Masquerain, this item allows it to Mega Evolve in battle.", - }, - starfberry: { - name: "Starf Berry", - spritenum: 472, - isBerry: true, - naturalGift: { - basePower: 100, - type: "Psychic", - }, - onUpdate(pokemon) { - if (pokemon.hp <= pokemon.maxhp / 2 || - ((pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony))) { - pokemon.eatItem(); - } - }, - onEat(pokemon) { - const stats: BoostID[] = []; - let stat: BoostID; - for (stat in pokemon.boosts) { - if (stat !== 'accuracy' && stat !== 'evasion' && pokemon.boosts[stat] < 6) { - stats.push(stat); - } - } - if (stats.length) { - const randomStat = this.sample(stats); - const boost: SparseBoostsTable = {}; - boost[randomStat] = 2; - this.boost(boost); - } - }, - num: 207, - gen: 3, - }, - typhlosionite: { - name: "Typhlosionite", - spritenum: 1, - megaStone: { "Typhlosion": "Typhlosion-Mega" }, - itemUser: ["Typhlosion"], - onTakeItem(item, source) { - return !item.megaStone?.[source.baseSpecies.baseSpecies]; - }, - num: -2, - gen: 9, - desc: "If held by a Typhlosion, this item allows it to Mega Evolve in battle.", - }, - tartapple: { - name: "Tart Apple", - spritenum: 712, - isBerry: true, - fling: { - basePower: 30, - }, - onBasePowerPriority: 15, - onBasePower(basePower, user, target, move) { - if ( - move && (user.baseSpecies.num === 841) && - (move.type === 'Grass' || move.type === 'Ground') - ) { - return this.chainModify([4915, 4096]); - } - }, - onUpdate(pokemon) { - if (pokemon.hp <= pokemon.maxhp / 2) { - pokemon.eatItem(); - } - }, - onTryEatItem(item, pokemon) { - if (!this.runEvent('TryHeal', pokemon, null, this.effect, pokemon.baseMaxhp / 4)) return false; - }, - onEat(pokemon) { - this.heal(pokemon.baseMaxhp / 4); - }, - itemUser: ["Flapple"], - num: 1117, - gen: 8, - desc: "Grass- and Ground-type moves have 1.2x power. Restores 1/4 max HP when at 1/2 max HP or less.", - }, - thickclub: { - name: "Thick Club", - spritenum: 491, - fling: { - basePower: 130, - }, - onModifyAtkPriority: 1, - onModifyAtk(atk, pokemon) { - if (pokemon.baseSpecies.baseSpecies === 'Mandibuzz' || pokemon.baseSpecies.baseSpecies === 'Mew') { - return this.chainModify(2); - } - }, - itemUser: ["Marowak", "Marowak-Alola", "Marowak-Alola-Totem", "Cubone", "Mandibuzz", "Mew"], - num: 258, - gen: 2, - desc: "Doubles Attack.", - }, - focusband: { - name: "Focus Band", - spritenum: 150, - fling: { - basePower: 10, - }, - onDamagePriority: -40, - onDamage(damage, target, source, effect) { - const chance = Math.max(Math.floor(100 - (target.maxhp - target.hp)), 10); - if (this.randomChance(chance, 100) && damage >= target.hp && effect && effect.effectType === 'Move') { - this.add("-activate", target, "item: Focus Band"); - return target.hp - 1; - } else { - return damage; - } - }, - num: 230, - gen: 2, - desc: "Chance to survive attack equal to percentage of remaining HP, minimum 10%.", - }, - raticite: { - name: "Raticite", - spritenum: 1, - megaStone: { "Raticate": "Raticate-Mega" }, - itemUser: ["Raticate"], - onTakeItem(item, source) { - return !item.megaStone?.[source.baseSpecies.baseSpecies]; - }, - num: -3, - gen: 9, - desc: "If held by a Raticate, this item allows it to Mega Evolve in battle.", - }, -}; +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { + bigroot: { + inherit: true, + onTryHealPriority: 1, + onTryHeal(damage, target, source, effect) { + const heals = ['drain', 'leechseed', 'ingrain', 'aquaring', 'strengthsap']; + if (heals.includes(effect.id)) { + return this.chainModify([6144, 4096]); + } + }, + shortDesc: "Holder gains 1.5x HP from draining, Aqua Ring, Ingrain, Leech Seed, Strength Sap.", + }, + masquerainite: { + name: "Masquerainite", + spritenum: 1, + megaStone: { "Masquerain": "Masquerain-Mega" }, + itemUser: ["Masquerain"], + onTakeItem(item, source) { + return !item.megaStone?.[source.baseSpecies.baseSpecies]; + }, + num: -1, + gen: 9, + desc: "If held by a Masquerain, this item allows it to Mega Evolve in battle.", + }, + starfberry: { + name: "Starf Berry", + spritenum: 472, + isBerry: true, + naturalGift: { + basePower: 100, + type: "Psychic", + }, + onUpdate(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2 || + ((pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony))) { + pokemon.eatItem(); + } + }, + onEat(pokemon) { + const stats: BoostID[] = []; + let stat: BoostID; + for (stat in pokemon.boosts) { + if (stat !== 'accuracy' && stat !== 'evasion' && pokemon.boosts[stat] < 6) { + stats.push(stat); + } + } + if (stats.length) { + const randomStat = this.sample(stats); + const boost: SparseBoostsTable = {}; + boost[randomStat] = 2; + this.boost(boost); + } + }, + num: 207, + gen: 3, + }, + typhlosionite: { + name: "Typhlosionite", + spritenum: 1, + megaStone: { "Typhlosion": "Typhlosion-Mega" }, + itemUser: ["Typhlosion"], + onTakeItem(item, source) { + return !item.megaStone?.[source.baseSpecies.baseSpecies]; + }, + num: -2, + gen: 9, + desc: "If held by a Typhlosion, this item allows it to Mega Evolve in battle.", + }, + tartapple: { + name: "Tart Apple", + spritenum: 712, + isBerry: true, + fling: { + basePower: 30, + }, + onBasePowerPriority: 15, + onBasePower(basePower, user, target, move) { + if ( + move && (user.baseSpecies.num === 841) && + (move.type === 'Grass' || move.type === 'Ground') + ) { + return this.chainModify([4915, 4096]); + } + }, + onUpdate(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2) { + pokemon.eatItem(); + } + }, + onTryEatItem(item, pokemon) { + if (!this.runEvent('TryHeal', pokemon, null, this.effect, pokemon.baseMaxhp / 4)) return false; + }, + onEat(pokemon) { + this.heal(pokemon.baseMaxhp / 4); + }, + itemUser: ["Flapple"], + num: 1117, + gen: 8, + desc: "Grass- and Ground-type moves have 1.2x power. Restores 1/4 max HP when at 1/2 max HP or less.", + }, + thickclub: { + name: "Thick Club", + spritenum: 491, + fling: { + basePower: 130, + }, + onModifyAtkPriority: 1, + onModifyAtk(atk, pokemon) { + if (pokemon.baseSpecies.baseSpecies === 'Mandibuzz' || pokemon.baseSpecies.baseSpecies === 'Mew') { + return this.chainModify(2); + } + }, + itemUser: ["Marowak", "Marowak-Alola", "Marowak-Alola-Totem", "Cubone", "Mandibuzz", "Mew"], + num: 258, + gen: 2, + desc: "Doubles Attack.", + }, + focusband: { + name: "Focus Band", + spritenum: 150, + fling: { + basePower: 10, + }, + onDamagePriority: -40, + onDamage(damage, target, source, effect) { + const chance = Math.max(Math.floor(100 - (target.maxhp - target.hp)), 10); + if (this.randomChance(chance, 100) && damage >= target.hp && effect && effect.effectType === 'Move') { + this.add("-activate", target, "item: Focus Band"); + return target.hp - 1; + } else { + return damage; + } + }, + num: 230, + gen: 2, + desc: "Chance to survive attack equal to percentage of remaining HP, minimum 10%.", + }, + raticite: { + name: "Raticite", + spritenum: 1, + megaStone: { "Raticate": "Raticate-Mega" }, + itemUser: ["Raticate"], + onTakeItem(item, source) { + return !item.megaStone?.[source.baseSpecies.baseSpecies]; + }, + num: -3, + gen: 9, + desc: "If held by a Raticate, this item allows it to Mega Evolve in battle.", + }, +}; diff --git a/data/mods/chatbats/moves.ts b/data/mods/chatbats/moves.ts index 4dafec9af8..9034cb0296 100644 --- a/data/mods/chatbats/moves.ts +++ b/data/mods/chatbats/moves.ts @@ -1,1725 +1,1722 @@ -export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { - ancientpower: { - inherit: true, - category: "Physical", - secondary: undefined, // no inherit - // Ancient Power is physical and boosts on-kill - onAfterMoveSecondarySelf(pokemon, target, move) { - if (!target || target.fainted || target.hp <= 0) { - this.boost({ atk: 1, def: 1, spa: 1, spd: 1, spe: 1 }, pokemon, pokemon, move); - } - }, - desc: "If this move causes the opponent to faint, raises the user's Attack, Defense, Special Attack, Special Defense, and Speed by 1 stage.", - shortDesc: "Raise all stats by 1 if this move KOs the target.", - }, - sandsearstorm: { - // Now always hits in Sand in addition to Rain - inherit: true, - onModifyMove(move, pokemon, target) { - if (target && ['raindance', 'sandstorm'].includes(target.effectiveWeather())) { - move.accuracy = true; - } - }, - }, - mountainmaw: { - // Copied from Psychic Fangs, just changed to be Rock type - num: -101, - accuracy: 100, - basePower: 85, - category: "Physical", - name: "Mountain Maw", - pp: 10, - priority: 0, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1 }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onTryHit(pokemon) { - // will shatter screens through sub, before you hit - pokemon.side.removeSideCondition('reflect'); - pokemon.side.removeSideCondition('lightscreen'); - pokemon.side.removeSideCondition('auroraveil'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Crunch', target); - this.add('-anim', source, 'Rock Slide', target); - }, - target: "normal", - type: "Rock", - contestType: "Clever", - shortDesc: "Breaks Screens.", - desc: "Breaks Screens.", - }, - scavenge: { - num: -102, - accuracy: 100, - basePower: 100, - category: "Physical", - name: "Scavenge", - pp: 10, - priority: 0, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, - target: "normal", - type: "Poison", - contestType: "Tough", - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Thief', target); - }, - onAfterMove(source) { - if (source.lastItem) { - const item = source.lastItem; - source.lastItem = ''; - source.setItem(item); - this.add('-item', source, this.dex.items.get(item), '[from] move: Scavenge'); - } else { - return null; - } - }, - shortDesc: "User regains their last used item, similar to Recycle.", - desc: "If the user has consumed their item, it will be restored.", - }, - aquaring: { - inherit: true, - condition: { - onStart(pokemon) { - this.add('-start', pokemon, 'Aqua Ring'); - }, - onResidualOrder: 6, - onResidual(pokemon) { - this.heal(pokemon.baseMaxhp / 16); - }, - onSourceModifyAtkPriority: 5, - onSourceModifyAtk(atk, attacker, defender, move) { - if (move.type === 'Fire') { - return this.chainModify(0.5); - } - }, - onSourceModifySpAPriority: 5, - onSourceModifySpA(atk, attacker, defender, move) { - if (move.type === 'Fire') { - return this.chainModify(0.5); - } - }, - onModifyAtk(atk, attacker, defender, move) { - if (move.type === 'Water') { - return this.chainModify(2); - } - }, - onModifySpA(atk, attacker, defender, move) { - if (move.type === 'Water') { - return this.chainModify(2); - } - }, - }, - shortDesc: "2x Water power, 0.5x Fire damage, heal 1/16 HP per turn.", - desc: "User recovers 1/16 max HP per turn. While this is active, this Pokemon's Water power is 2x and Fire power against it is halved.", - }, - - ragingbull: { - num: 9999, - accuracy: 100, - basePower: 90, - category: "Physical", - priority: 0, - pp: 10, - name: "Raging Bull", - type: "Normal", - effectType: "Move", - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, - shortDesc: "Type swaps to most effective (Water, Fighting, Fire, or Normal).", - desc: "Changes the move's and user's forme to the most effective against the target (Water, Fighting, Fire, or Normal).", - beforeMoveCallback(source, target, move) { - if (target) { - const typeEffectiveness: { [k: string]: number } = { - Normal: this.dex.getEffectiveness('Normal', target), - Water: this.dex.getEffectiveness('Water', target), - Fighting: this.dex.getEffectiveness('Fighting', target), - Fire: this.dex.getEffectiveness('Fire', target), - }; - let bestType = 'Normal'; - let type: keyof typeof typeEffectiveness; - let maxEffectiveness = -Infinity; - // gets most effective type against target (defaults to normal) - for (type in typeEffectiveness) { - if (typeEffectiveness[type] > maxEffectiveness) { - maxEffectiveness = typeEffectiveness[type]; - bestType = type; - } - } - // changes form to match most effective type - let forme = ''; - switch (bestType) { - case 'Water': forme = '-Paldea-Aqua'; break; - case 'Fighting': forme = '-Paldea-Combat'; break; - case 'Fire': forme = '-Paldea-Blaze'; break; - } - source.formeChange('Tauros' + forme); - this.add('-ability', source, 'Adaptability'); - source.m.ragingBullMoveType = bestType; - } - }, - // animation was remnant of Techno Blast code being copied, decided to keep because funny - onPrepareHit(target, source, move) { - this.add('-anim', source, 'Techno Blast', target); - }, - // sets type properly (failsafe) - onModifyType(move, pokemon, target) { - if (pokemon.m.ragingBullMoveType) { - move.type = pokemon.m.ragingBullMoveType; - } - }, - target: "normal", - }, - iciclestorm: { - num: -1044, - accuracy: 95, - basePower: 90, - category: "Physical", - name: "Icicle Storm", - pp: 15, - priority: 0, - flags: { protect: 1, mirror: 1, metronome: 1 }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Ice Shard', target); - this.add('-anim', source, 'Ice Shard', target); - this.add('-anim', source, 'Ice Shard', target); - }, - self: { - onHit(source) { - this.field.setWeather('snowscape'); - }, - }, - target: "normal", - type: "Ice", - contestType: "Clever", - desc: "Sets Snow on-hit.", - shortDesc: "Sets Snow.", - }, - springtidestorm: { - // Now always hits in Sand in addition to Rain - inherit: true, - onModifyMove(move, pokemon, target) { - if (target && ['sandstorm', 'raindance'].includes(target.effectiveWeather())) { - move.accuracy = true; - } - }, - }, - // Poison type now - spitup: { - inherit: true, - type: "Poison", - }, - // clone of shell side arm (modified to be base Physical so the randbats algorithm gives Attack EVs to Phione - geyser: { - num: -104, - accuracy: 100, - basePower: 100, - category: "Physical", - name: "Geyser", - pp: 10, - priority: 0, - flags: { protect: 1, contact: 1, mirror: 1, metronome: 1 }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onModifyMove(move, pokemon, target) { - if (!target) return; - const atk = pokemon.getStat('atk', false, true); - const spa = pokemon.getStat('spa', false, true); - const def = target.getStat('def', false, true); - const spd = target.getStat('spd', false, true); - const physical = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * atk) / def) / 50); - const special = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * spa) / spd) / 50); - if (physical < special || (physical === special && this.randomChance(1, 2))) { - move.category = 'Special'; - move.flags.contact = undefined; - } - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Water Spout', target); - }, - onHit(target, source, move) { - // Shell Side Arm normally reveals its category via animation on cart, but doesn't play either custom animation against allies - if (!source.isAlly(target)) this.hint(move.category + " Geyser"); - }, - onAfterSubDamage(damage, target, source, move) { - if (!source.isAlly(target)) this.hint(move.category + " Geyser"); - }, - target: "normal", - type: "Water", - desc: "This move is Special + no contact if it would be stronger.", - shortDesc: "This move is Special + no contact if it would be stronger.", - }, - // Encore + Rain Dance - tidalsurge: { - num: -105, - accuracy: 100, - basePower: 0, - category: "Status", - name: "Tidal Surge", - pp: 10, - priority: 0, - flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source, move) { - this.add('-anim', source, 'Surf', target); - }, - onHit(target, source, move) { - this.add('-anim', source, 'Encore', target); - target.addVolatile('encore'); - }, - weather: 'raindance', - target: "normal", - type: "Water", - zMove: { boost: { spe: 1 } }, - contestType: "Beautiful", - desc: "Encore + Rain Dance", - shortDesc: "Encore + Rain Dance", - }, - // prio + double power if opponent is using a water move - bonsaibounce: { - num: -106, - accuracy: 100, - basePower: 70, - category: "Physical", - name: "Bonsai Bounce", - pp: 10, - priority: 0, - flags: { protect: 1, contact: 1, mirror: 1, metronome: 1 }, - // checks for water move usage from opponent - onModifyPriority(priority, source) { - // gets current foe in singles - const foe = source.foes()[0]; - if (!foe || foe.fainted) { - return priority; - } - // gets attack of foe this turn - const action = this.queue.willMove(foe); - if (!action || action.choice !== 'move') { - return priority; - } - const move = action.move; - if (move?.type === 'Water') { - return priority + 1; - } else { - return priority; - } - }, - // modifies base power - onBasePower(basePower, source, target) { - const foe = source.foes()[0]; - if (!foe || foe.fainted) { - return basePower; - } - const action = this.queue.willMove(foe); - if (!action || action.choice !== 'move') { - return basePower; - } - const move = action.move; - if (move?.type === 'Water') { - this.add('-message', `Sudowoodo draws power from the water!`); - return basePower + 70; - } else { - return basePower; - } - }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source, move) { - this.add('-anim', source, 'Ivy Cudgel Rock', target); - this.add('-anim', source, 'Splash'); - }, - target: "normal", - type: "Rock", - contestType: "Beautiful", - shortDesc: "+1 Priority and 2x power if target uses Water move.", - desc: "If the target is using a Water type move, this move will always move first and gains double power.", - }, - ironstrike: { - // implemented via changes to Stealth Rocks and Spikes - num: -107, - accuracy: 100, - basePower: 50, - category: "Physical", - name: "Iron Strike", - pp: 15, - priority: 0, - flags: { protect: 1, contact: 1, mirror: 1, metronome: 1 }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source, move) { - this.add('-anim', source, 'Metal Claw', target); - }, - target: "normal", - type: "Steel", - contestType: "Beautiful", - shortDesc: "Inflicts damage from hazards on target's side.", - desc: "Target takes damage from all entry hazards on their side of the field, unless they are immune.", - }, - thunderkick: { - num: -1192, - name: "Thunder Kick", - type: "Electric", - basePower: 50, - accuracy: 100, - category: "Physical", - priority: 0, - pp: 5, - target: "normal", - contestType: "Beautiful", - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(t, s, m) { - this.add('-anim', s, 'High Jump Kick', t); - this.add('-anim', s, 'Thunder', t); - }, - flags: { contact: 1, protect: 1 }, - }, - thunderouskick: { - inherit: true, - secondary: undefined, // no inherit - onHit(target, source, move) { - // random # 0 or 1 - const randomNum = this.random(2); - // 50% chance to drop def - if (randomNum === 0) { - if (target.boosts.def !== -6) { - this.boost({ def: -1 }, target, source, move); - } - } else { - this.add('-message', `${source.name} follows up with a Thunder Kick!`); - // uses Thunder Kick - this.actions.useMove('thunderkick', source, { target }); - } - }, - desc: "50% chance to reduce Defense by 1, 50% chance to inflict an additional 50 BP Electric type damage.", - shortDesc: "50% -1 Defense, 50% extra 50 BP Electric damage.", - }, - stealthrock: { - num: 446, - accuracy: true, - basePower: 0, - category: "Status", - name: "Stealth Rock", - pp: 20, - priority: 0, - flags: { reflectable: 1, metronome: 1, mustpressure: 1 }, - sideCondition: 'stealthrock', - condition: { - // this is a side condition - onSideStart(side) { - this.add('-sidestart', side, 'move: Stealth Rock'); - }, - onSwitchIn(pokemon) { - // hardcode to prevent hazard damage during Order Up switches + enforce hazard damage while King of the Hill is active - if ((pokemon.hasItem('heavydutyboots') && !pokemon.side.getSideCondition('kingofthehill')) || - pokemon.side.getSideCondition('orderup')) return; - const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6); - this.damage(pokemon.maxhp * (2 ** typeMod) / 8); - }, - // iron strike functionality (reapplies stealth rock damage when hit with Iron Strike) - onHit(pokemon, source, move) { - if (move.id === 'ironstrike') { - if (pokemon.hasItem('heavydutyboots')) return; - const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6); - this.damage(pokemon.maxhp * (2 ** typeMod) / 8); - } - }, - }, - target: "foeSide", - type: "Rock", - zMove: { boost: { def: 1 } }, - contestType: "Cool", - }, - spikes: { - num: 191, - accuracy: true, - basePower: 0, - category: "Status", - name: "Spikes", - pp: 20, - priority: 0, - flags: { reflectable: 1, nonsky: 1, metronome: 1, mustpressure: 1 }, - sideCondition: 'spikes', - condition: { - // this is a side condition - onSideStart(side) { - this.add('-sidestart', side, 'Spikes'); - this.effectState.layers = 1; - }, - onSideRestart(side) { - if (this.effectState.layers >= 3) return false; - this.add('-sidestart', side, 'Spikes'); - this.effectState.layers++; - }, - onSwitchIn(pokemon) { - // Order Up + king of the hill functionality - if (((!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) && !pokemon.side.getSideCondition('kingofthehill')) || - pokemon.side.getSideCondition('orderup')) return; - const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 - this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24); - }, - // iron strike functionality - onHit(pokemon, source, move) { - if (move.id === 'ironstrike') { - if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return; - const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 - this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24); - } - }, - }, - target: "foeSide", - type: "Ground", - zMove: { boost: { def: 1 } }, - contestType: "Clever", - }, - orderup: { - num: 856, - accuracy: 100, - basePower: 80, - category: "Physical", - name: "Order Up", - pp: 10, - priority: 0, - flags: { protect: 1 }, - condition: { - duration: 2, - onSwitchInPriority: -1, - onSwitchIn(pokemon) { - // when Dondozo switches back in after eating, it gains boost - if (pokemon.baseSpecies.baseSpecies === 'Dondozo') { - // reapplies volatiles and stat boosts - if ((pokemon as any).storedVolatiles) { - for (const volatile in (pokemon as any).storedVolatiles) { - pokemon.addVolatile(volatile); - } - } - if ((pokemon as any).storedBoosts) { - for (const stat in (pokemon as any).storedBoosts) { - const change = (pokemon as any).storedBoosts[stat as BoostID]; - if (change !== 0) { - this.boost({ [stat]: change }, pokemon); - } - } - } - this.add('-message', `Dondozo enjoyed its meal!`); - // applies boost based on eaten mon stats - if (this.effectState.eatenBoost === 'atk' || this.effectState.eatenBoost === 'spa') { - this.boost({ atk: 3 }, pokemon); - } else if (this.effectState.eatenBoost === 'def' || this.effectState.eatenBoost === 'spd') { - this.boost({ def: 2, spd: 2 }, pokemon); - } else { - this.boost({ spe: 3 }, pokemon); - } - // adds volatile ordered, which prevents the order up effect from occurring again until Dondozo switches out - pokemon.addVolatile('ordered'); - // removes the side condition - pokemon.side.removeSideCondition('orderup'); - } else { - // after Dondozo switches out, this happens to the next pokemon that is switched in - const meal = pokemon; - // faints the eaten mon - pokemon.faint(); - // finds highest stat of eaten mon, stored in effectState eatenBoost - const stats = ['atk', 'def', 'spa', 'spd', 'spe']; - let highestStat = stats[0]; - let maxStatValue = meal.storedStats[highestStat as StatIDExceptHP]; - - for (const stat of stats) { - if (meal.storedStats[stat as StatIDExceptHP] > maxStatValue) { - highestStat = stat; - maxStatValue = meal.storedStats[stat as StatIDExceptHP]; - } - } - this.effectState.eatenBoost = highestStat; - } - }, - onFaint(pokemon) { - const side = pokemon.side; - const dondozo = side.pokemon.find(p => p.species.name === 'Dondozo' && !p.fainted); - if (!dondozo) return; - // forces Dondozo in after the eaten mon faints - this.queue.insertChoice({ - choice: 'switch', - pokemon, - target: dondozo, - }); - this.checkFainted(); - }, - }, - // when order up hits, first checks for volatile ordered to ensure that Order Up has not already been used, then starts orderup side condition and switches Dondozo out - onHit(target, source, move) { - if (source.volatiles['ordered']) return; - if (source.species.id === 'mew') return; - source.side.addSideCondition('orderup'); - // stores stat changes and volatiles to reapply after switch - (source as any).storedBoosts = { ...source.boosts }; - (source as any).storedVolatiles = {}; - for (const volatile in source.volatiles) { - (source as any).storedVolatiles[volatile] = source.volatiles[volatile]; - } - if (source.side.getSideCondition('orderup')) { - this.add('-ability', source, 'Order Up'); - this.add('-message', `Select the Pokemon you would like to eat. Its highest base stat affects the boost you gain from this move.`); - } - source.switchFlag = true; - }, - hasSheerForce: true, - target: "normal", - type: "Dragon", - desc: "Dondozo eats a mon on the user's team, KOing it. Dondozo then gains a stat boost depending on the eaten mon's highest stat: +3 Attack for Atk/SpA, +2 Def/+2 SpD for Def/SpD, and +3 Speed for Speed.", - shortDesc: "Dondozo KOs an ally mon. Gain stat boost in ally's highest stat.", - }, - toxicspikes: { - // prevents Dondozo from being affected by Toxic Spikes during Order Up switching - inherit: true, - condition: { - // this is a side condition - onSideStart(side) { - this.add('-sidestart', side, 'move: Toxic Spikes'); - this.effectState.layers = 1; - }, - onSideRestart(side) { - if (this.effectState.layers >= 2) return false; - this.add('-sidestart', side, 'move: Toxic Spikes'); - this.effectState.layers++; - }, - onSwitchIn(pokemon) { - // hardcode for King of the Hill - if (!pokemon.isGrounded() && !pokemon.side.getSideCondition('kingofthehill')) return; - if (pokemon.hasType('Poison')) { - this.add('-sideend', pokemon.side, 'move: Toxic Spikes', `[of] ${pokemon}`); - pokemon.side.removeSideCondition('toxicspikes'); - // hardcode for King of the Hill and Order Up - } else if ( - pokemon.hasType('Steel') || - (pokemon.hasItem('heavydutyboots') && !pokemon.side.getSideCondition('kingofthehill')) || - pokemon.side.getSideCondition('orderup') - ) { - // do nothing - } else if (this.effectState.layers >= 2) { - pokemon.trySetStatus('tox', pokemon.side.foe.active[0]); - } else { - pokemon.trySetStatus('psn', pokemon.side.foe.active[0]); - } - }, - }, - }, - stickyweb: { - inherit: true, - condition: { - onSideStart(side) { - this.add('-sidestart', side, 'move: Sticky Web'); - }, - onSwitchIn(pokemon) { - // king of the hill - if ((!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) && - !pokemon.side.getSideCondition('kingofthehill')) return; - this.add('-activate', pokemon, 'move: Sticky Web'); - this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb')); - }, - }, - }, - shatteredseal: { - num: -1002, - accuracy: true, - basePower: 90, - category: "Physical", - name: "Shattered Seal", - pp: 15, - pseudoWeather: 'gravity', - priority: 0, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Spite', target); - this.add('-anim', source, 'Spirit Shackle', target); - }, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, - target: "normal", - type: "Ghost", - contestType: "Clever", - desc: "Sets gravity.", - shortDesc: "Sets gravity.", - }, - alloutassault: { - num: -1003, - accuracy: 100, - basePower: 120, - category: "Physical", - name: "All-Out Assault", - pp: 5, - priority: 0, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'All-Out Pummeling', target); - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - if (!target || target.fainted || target.hp <= 0) { - this.boost({ atk: 1 }, pokemon, pokemon, move); - } else { - this.boost({ atk: -1 }, pokemon, pokemon, move); - } - }, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, - target: "normal", - type: "Fighting", - contestType: "Clever", - desc: "If this move KOs the target, raise the user's attack by 1. Otherwise, lower attack by 1.", - shortDesc: "On KO: +1 Atk. Otherwise -1 Atk.", - }, - wickedblow: { - inherit: true, - beforeMoveCallback(source, target, move) { - if (target) { - this.effectState.surgingStrikesAlreadyUsed = 0; - this.add('-anim', source, 'Techno Blast', target); - const typeEffectiveness: { [k: string]: number } = { - Water: this.dex.getEffectiveness('Water', target), - Dark: this.dex.getEffectiveness('Dark', target), - }; - let type: keyof typeof typeEffectiveness; - let bestType = 'Water'; - let maxEffectiveness = -Infinity; - // gets most effective type against target (defaults to the current type) - for (type in typeEffectiveness) { - if (typeEffectiveness[type] > maxEffectiveness) { - maxEffectiveness = typeEffectiveness[type]; - bestType = type; - } - } - // changes form to match most effective type - if (bestType === 'Dark') { - this.add('-message', `Urshifu takes pity on its foe and transforms into a weaker type!`); - source.formeChange('Urshifu-Rapid-Strike', null, true); - source.setAbility('Sniper'); - this.add('-ability', source, 'Sniper'); - const oldMove = 'wickedblow'; - const newMove = 'surgingstrikes'; - const oldMoveId = this.toID(oldMove); - const newMoveData = this.dex.moves.get(newMove); - const oldMoveIdx = source.moveSlots.findIndex(x => x.id === oldMoveId); - if (oldMoveIdx >= 0) { - source.moveSlots[oldMoveIdx] = source.baseMoveSlots[oldMoveIdx] = { - move: newMoveData.name, - id: newMoveData.id, - pp: newMoveData.pp, - maxpp: newMoveData.pp, - target: newMoveData.target, - disabled: false, - used: false, - }; - } - this.actions.useMove('surgingstrikes', source, { target }); - this.effectState.surgingStrikesAlreadyUsed = 1; - } - } - }, - onTry(source, target, move) { - if (this.effectState.surgingStrikesAlreadyUsed === 1) { - return null; - } - }, - desc: "This move will transform into Rapid Strike Urshifu/Surging Strikes if it would be less effective against the target.", - shortDesc: "Becomes Surging Strikes if it would be less effective.", - }, - surgingstrikes: { - inherit: true, - beforeMoveCallback(source, target, move) { - if (source.species.id === 'araquanid') return; - if (target) { - this.effectState.wickedBlowAlreadyUsed = 0; - this.add('-anim', source, 'Techno Blast', target); - const typeEffectiveness: { [k: string]: number } = { - Dark: this.dex.getEffectiveness('Dark', target), - Water: this.dex.getEffectiveness('Water', target), - }; - let type: keyof typeof typeEffectiveness; - let bestType = 'Dark'; - let maxEffectiveness = -Infinity; - // gets most effective type against target (defaults to the current type) - for (type in typeEffectiveness) { - if (typeEffectiveness[type] > maxEffectiveness) { - maxEffectiveness = typeEffectiveness[type]; - bestType = type; - } - } - // changes form to match most effective type - if (bestType === 'Water') { - this.add('-message', `Urshifu takes pity on its foe and transforms into a weaker type!`); - source.formeChange('Urshifu', null, true); - source.setAbility('Sniper'); - this.add('-ability', source, 'Sniper'); - const newMove = 'wickedblow'; - const oldMoveId: ID = 'surgingstrikes' as ID; - const newMoveData = this.dex.moves.get(newMove); - const oldMoveIdx = source.moveSlots.findIndex(x => x.id === oldMoveId); - if (oldMoveIdx >= 0) { - source.moveSlots[oldMoveIdx] = source.baseMoveSlots[oldMoveIdx] = { - move: newMoveData.name, - id: newMoveData.id, - pp: newMoveData.pp, - maxpp: newMoveData.pp, - target: newMoveData.target, - disabled: false, - used: false, - }; - } - this.actions.useMove('wickedblow', source, { target }); - this.effectState.wickedBlowAlreadyUsed = 1; - } - } - }, - onTry(source, target, move) { - if (this.effectState.wickedBlowAlreadyUsed === 1) { - return null; - } - }, - desc: "This move will transform into Single Strike Urshifu/Wicked Blow if it would be less effective against the target. Does not work with Araquanid.", - shortDesc: "Becomes Wicked Blow if it would be less effective.", - }, - twister: { - num: 239, - accuracy: 100, - basePower: 80, - category: "Special", - name: "Twister", - pp: 20, - priority: 0, - onHit(target, source, move) { - let success = !!this.boost({ evasion: -1 }); - const removeAll = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; - const removeTarget = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', ...removeAll]; - for (const targetCondition of removeTarget) { - if (target.side.removeSideCondition(targetCondition)) { - if (!removeAll.includes(targetCondition)) continue; - this.add('-sideend', target.side, this.dex.conditions.get(targetCondition).name, '[from] move: Defog', `[of] ${source}`); - success = true; - } - } - for (const sideCondition of removeAll) { - if (source.side.removeSideCondition(sideCondition)) { - this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Defog', `[of] ${source}`); - success = true; - } - } - this.field.clearTerrain(); - return success; - }, - flags: { protect: 1, mirror: 1, metronome: 1, wind: 1 }, - target: "allAdjacentFoes", - type: "Dragon", - contestType: "Cool", - desc: "Removes hazards, side conditions, and terrain. Lowers Evasion by 1.", - shortDesc: "-1 evasion; ends user and target hazards/terrain.", - }, - magnetbomb: { - num: 443, - accuracy: true, - basePower: 90, - category: "Special", - name: "Magnet Bomb", - pp: 20, - priority: 0, - onHit(target, source, move) { - target.setType('Steel'); - this.add('-start', target, 'typechange', 'Steel'); - }, - flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 }, - target: "normal", - type: "Steel", - contestType: "Cool", - desc: "Changes the target's type to Steel.", - shortDesc: "Changes the target's type to Steel.", - }, - triplekick: { - inherit: true, - basePower: 20, - basePowerCallback(pokemon, target, move) { - return 20 * move.hit; - }, - }, - freezingglare: { - inherit: true, - secondary: { - chance: 30, - onHit(target, source, move) { - if (!target.hasType('Ice')) { - target.trySetStatus('frostbite', source, move); - } - }, - }, - desc: "30% chance to inflict Frostbite.", - shortDesc: "30% chance to inflict Frostbite.", - }, - zippyzap: { - inherit: true, - category: "Special", - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Extreme Speed', target); - this.add('-anim', source, 'Thunder', target); - }, - secondary: undefined, // no inherit - desc: "Nearly always goes first.", - shortDesc: "Nearly always goes first.", - }, - burnout: { - num: -1004, - accuracy: 100, - basePower: 70, - category: "Special", - name: "Burn Out", - pp: 20, - priority: 0, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Fire Spin', target); - }, - onHit(target, source, move) { - if (source.species.id === 'jolteon' || source.species.id === 'vaporeon') { - this.add('-message', `Eevee uses its Fire Stone!`); - const currentHP = source.hp / source.maxhp; - source.formeChange('Flareon', null, true); - source.sethp(source.maxhp * currentHP); - this.add('-sethp', source, source.getHealth, '[from] move: Flip Turn', '[silent]'); - // target.setAbility('Eeveelution'); - // target.baseAbility = target.ability; - const newMoves = ['flipturn', 'voltswitch', 'sizzlyslide', 'facade']; - // Update move slots - // eslint-disable-next-line @typescript-eslint/no-shadow - source.moveSlots = newMoves.map(move => { - const moveData = this.dex.moves.get(move); - return { - move: moveData.name, - id: moveData.id, - pp: moveData.pp, - maxpp: moveData.pp, - target: moveData.target, - disabled: false, - used: false, - }; - }); - // this forces the UI to update move slots visually - (source as any).baseMoveSlots = source.moveSlots.slice(); - } - }, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, - selfSwitch: true, - target: "normal", - type: "Fire", - contestType: "Cute", - desc: "User switches out after damaging the target.", - shortDesc: "User switches out after damaging the target.", - }, - voltswitch: { - inherit: true, - onHit(target, source, move) { - if (source.species.id === 'flareon' || source.species.id === 'vaporeon') { - this.add('-message', `Eevee uses its Thunder Stone!`); - const currentHP = source.hp / source.maxhp; - source.formeChange('Jolteon', null, true); - source.sethp(source.maxhp * currentHP); - this.add('-sethp', source, source.getHealth, '[from] move: Flip Turn', '[silent]'); - // target.setAbility('Eeveelution'); - // target.baseAbility = target.ability; - const newMoves = ['flipturn', 'burnout', 'zippyzap', 'freezyfrost']; - // Update move slots - // eslint-disable-next-line @typescript-eslint/no-shadow - source.moveSlots = newMoves.map(move => { - const moveData = this.dex.moves.get(move); - return { - move: moveData.name, - id: moveData.id, - pp: moveData.pp, - maxpp: moveData.pp, - target: moveData.target, - disabled: false, - used: false, - }; - }); - // this forces the UI to update move slots visually - (source as any).baseMoveSlots = source.moveSlots.slice(); - } - }, - }, - flipturn: { - inherit: true, - onHit(target, source, move) { - if (source.species.id === 'jolteon' || source.species.id === 'flareon') { - this.add('-message', `Eevee uses its Water Stone!`); - const currentHP = source.hp / source.maxhp; - source.formeChange('Vaporeon', null, true); - source.sethp(source.maxhp * currentHP); - this.add('-sethp', source, source.getHealth, '[from] move: Flip Turn', '[silent]'); - // target.setAbility('Eeveelution'); - // target.baseAbility = target.ability; - const newMoves = ['voltswitch', 'burnout', 'recover', 'scald']; - // Update move slots - // eslint-disable-next-line @typescript-eslint/no-shadow - source.moveSlots = newMoves.map(move => { - const moveData = this.dex.moves.get(move); - return { - move: moveData.name, - id: moveData.id, - pp: moveData.pp, - maxpp: moveData.pp, - target: moveData.target, - disabled: false, - used: false, - }; - }); - // this forces the UI to update move slots visually - (source as any).baseMoveSlots = source.moveSlots.slice(); - } - }, - }, - sizzlyslide: { - inherit: true, - basePower: 80, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Flame Charge', target); - }, - }, - freezyfrost: { - inherit: true, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Blizzard', target); - }, - }, - bouncybubble: { - inherit: true, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Bubble Beam', target); - }, - }, - purify: { - inherit: true, - pp: 10, - flags: { reflectable: 1, heal: 1, metronome: 1 }, - onHit(target, source) { - const foe = source.side.foe.active[0]; - if (foe && !foe.fainted && foe.status) { - this.heal(Math.ceil(source.maxhp * 0.5), source); - } else { - this.heal(Math.ceil(source.maxhp * 0.25), source); - } - }, - target: "self", - desc: "Heals for 25% HP, or 50% if foe is statused.", - shortDesc: "Heals for 25% HP, or 50% if foe is statused.", - }, - saltcurse: { - num: -1006, - accuracy: 100, - basePower: 70, - basePowerCallback(pokemon, target, move) { - if (target.status === 'par') { - this.debug('BP doubled on paralyzed target'); - return move.basePower * 2; - } - return move.basePower; - }, - onEffectiveness(typeMod, target, type) { - if (type === 'Water') return 1; - if (type === 'Steel') return 1; - }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Glare', target); - this.add('-anim', source, 'Ivy Cudgel Rock', target); - }, - category: "Physical", - name: "Salt Curse", - pp: 10, - priority: 0, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, - target: "normal", - type: "Rock", - contestType: "Tough", - desc: "Double power if target is Paralyzed. Super-effective against Water and Steel.", - shortDesc: "2x BP if target is Paralyzed, Water type, or Steel type.", - }, - flyby: { - num: -1006, - accuracy: 100, - basePower: 70, - category: "Special", - name: "Fly-by", - pp: 20, - priority: 0, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Dual Wingbeat', target); - }, - flags: { protect: 1, mirror: 1, metronome: 1 }, - selfSwitch: true, - secondary: { - chance: 50, - boosts: { - atk: -1, - }, - }, - target: "normal", - type: "Flying", - contestType: "Cute", - desc: "User switches out. Target: -1 Attack.", - shortDesc: "User switches out. Target: -1 Attack.", - }, - silktrap: { - inherit: true, - condition: { - duration: 1, - onStart(target) { - this.add('-singleturn', target, 'Protect'); - }, - onTryHitPriority: 3, - onTryHit(target, source, move) { - if (!move.flags['protect'] || move.category === 'Status') { - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } - if (move.smartTarget) { - move.smartTarget = false; - } else { - this.add('-activate', target, 'move: Protect'); - } - const lockedmove = source.getVolatile('lockedmove'); - if (lockedmove) { - // Outrage counter is reset - if (source.volatiles['lockedmove'].duration === 2) { - delete source.volatiles['lockedmove']; - } - } - if (this.checkMoveMakesContact(move, source, target)) { - source.side.addSideCondition('stickyweb'); - } - return this.NOT_FAIL; - }, - onHit(target, source, move) { - if (move.isZOrMaxPowered && this.checkMoveMakesContact(move, source, target)) { - source.side.addSideCondition('stickyweb'); - } - }, - }, - desc: "Protect. If contact: set Sticky Web.", - shortDesc: "Protect. If contact: set Sticky Web.", - }, - heatsink: { - num: -1007, - accuracy: 100, - basePower: 80, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Fire Spin', target); - this.add('-anim', source, 'Bitter Blade', target); - }, - onModifyMove(move, source, target) { - if (target?.status === 'brn') { - move.drain = [3, 4]; - } - }, - category: "Special", - name: "Heat Sink", - pp: 20, - priority: 0, - flags: { protect: 1, mirror: 1, metronome: 1 }, - drain: [1, 2], - target: "normal", - type: "Fire", - zMove: { basePower: 160 }, - contestType: "Clever", - desc: "50% drain. 75% drain instead if target is Burned.", - shortDesc: "50% drain. 75% drain if target is Burned.", - }, - terastarstorm: { - inherit: true, - onModifyType(move, pokemon) { - const types = pokemon.getTypes(); - let type = types[0]; - if (type === 'Bird') type = '???'; - if (type === '???' && types[1]) type = types[1]; - move.type = type; - if (pokemon.species.name === 'Terapagos-Stellar') { - move.type = 'Stellar'; - if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) { - move.category = 'Physical'; - } - } - }, - desc: "Type varies based on the user's primary type.", - shortDesc: "Type varies based on the user's primary type.", - }, - grabapple: { - num: -1008, - accuracy: 100, - basePower: 100, - category: "Physical", - name: "Grab Apple", - pp: 10, - priority: 0, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, - target: "normal", - type: "Grass", - contestType: "Tough", - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Grav Apple', target); - this.add('-anim', source, 'Thief', target); - }, - onAfterMove(source) { - if (source.lastItem) { - const item = source.lastItem; - source.lastItem = ''; - source.setItem(item); - this.add('-item', source, this.dex.items.get(item), '[from] move: Grab Apple'); - } else { - return null; - } - }, - shortDesc: "User regains their last used item, similar to Recycle.", - desc: "If the user has consumed their item, it will be restored.", - }, - sashimishuffle: { - num: -1009, - accuracy: true, - basePower: 0, - category: "Status", - name: "Sashimi Shuffle", - pp: 5, - priority: 0, - flags: { metronome: 1 }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Order Up', target); - this.add('-anim', source, 'Order Up', target); - }, - onHit(target) { - if (!this.canSwitch(target.side) || target.volatiles['commanded']) { - this.attrLastMove('[still]'); - this.add('-fail', target); - return this.NOT_FAIL; - } - }, - self: { - onHit(source) { - source.skipBeforeSwitchOutEventFlag = true; - }, - }, - selfSwitch: true, - slotCondition: 'sashimishuffle', - condition: { - onSwitchIn(target) { - this.singleEvent('Swap', this.effect, this.effectState, target); - }, - onSwap(target) { - if (!target.fainted) { - target.heal(target.maxhp / 3); - this.add('-heal', target, target.getHealth, '[from] move: Sashimi Shuffle'); - target.side.removeSlotCondition(target, 'sashimishuffle'); - } - }, - }, - target: "self", - type: "Normal", - zMove: { effect: 'clearnegativeboost' }, - contestType: "Cute", - shortDesc: "User switches. Next Pokemon heals 1/3 HP.", - desc: "User switches. Next Pokemon heals 1/3 HP.", - }, - technoblast: { - inherit: true, - basePowerCallback(pokemon, target, move) { - if (this.field.isWeather('snowscape')) { - return move.basePower * 1.3; - } else return move.basePower; - }, - }, - crowverload: { - num: -1010, - accuracy: 100, - basePower: 12, - category: "Physical", - name: "Crowverload", - pp: 10, - priority: -4, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Glare', target); - this.add('-anim', source, 'X-Scissor', target); - }, - onTryHit(source, target, move) { - if (source.volatiles['substitute']) { - this.add('-fail', source, 'move: Crowverload'); - return this.NOT_FAIL; - } - }, - onAfterMove(source, target, move) { - this.actions.useMove('substitute', source, { }); - // source.addVolatile['substitute']; - // this.damage(Math.ceil(source.maxhp / 4)); - }, - flags: { protect: 1, mirror: 1, metronome: 1 }, - multihit: [10, 10], - target: "normal", - type: "Dark", - zMove: { basePower: 140 }, - maxMove: { basePower: 130 }, - contestType: "Tough", - shortDesc: "Hits 10 times. User creates a Substitute.", - desc: "Hits 10 times. User creates a Substitute.", - }, - naturesfury: { - num: -1011, - accuracy: true, - basePower: 0, - category: "Status", - name: "Nature's Fury", - pp: 20, - priority: 0, - flags: { failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1 }, - onModifyPriority(priority, source, target, move) { - if (this.field.isTerrain('electricterrain')) { - return priority + 1; - } else if (this.field.isTerrain('grassyterrain')) { - return priority + 1; - } else if (this.field.isTerrain('mistyterrain')) { - return priority + 1; - } else if (this.field.isTerrain('psychicterrain')) { - return priority; - } else { - return priority + 2; - } - }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onTryHit(target, pokemon) { - let move = 'extremespeed'; - if (this.field.isTerrain('electricterrain')) { - move = 'lightningleap'; - } else if (this.field.isTerrain('grassyterrain')) { - move = 'grassyglide'; - } else if (this.field.isTerrain('mistyterrain')) { - move = 'mistymarch'; - } else if (this.field.isTerrain('psychicterrain')) { - move = 'wackywhack'; - } - this.actions.useMove(move, pokemon, { target }); - return null; - }, - callsMove: true, - target: "normal", - type: "Normal", - contestType: "Beautiful", - shortDesc: "Move used depends on Terrain.", - desc: "Move used depends on Terrain.", - }, - mistymarch: { - num: -1012, - accuracy: 100, - basePower: 55, - category: "Physical", - name: "Misty March", - pp: 20, - priority: 0, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Play Rough', target); - }, - onModifyPriority(priority, source, target, move) { - if (this.field.isTerrain('mistyterrain') && source.isGrounded()) { - return priority + 1; - } - }, - target: "normal", - type: "Fairy", - contestType: "Cool", - shortDesc: "User on Misty Terrain: +1 priority.", - desc: "User on Misty Terrain: +1 priority.", - }, - lightningleap: { - num: -1013, - accuracy: 100, - basePower: 55, - category: "Physical", - name: "Lightning Leap", - pp: 20, - priority: 0, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Volt Tackle', target); - }, - onModifyPriority(priority, source, target, move) { - if (this.field.isTerrain('electricterrain') && source.isGrounded()) { - return priority + 1; - } - }, - target: "normal", - type: "Electric", - contestType: "Cool", - shortDesc: "User on Electric Terrain: +1 priority.", - desc: "User on Electric Terrain: +1 priority.", - }, - wackywhack: { - num: -1014, - accuracy: 100, - basePower: 80, - category: "Physical", - name: "Wacky Whack", - pp: 20, - priority: 0, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Zed Headbutt', target); - this.add('-anim', source, 'Thief', target); - }, - onAfterMoveSecondarySelf(source, target, move) { - if (this.field.isTerrain('psychicterrain') && source.isGrounded()) { - this.boost({ spe: 1 }, source, source); - } - }, - target: "normal", - type: "Psychic", - contestType: "Cool", - shortDesc: "User in Psychic Terrain: +1 Speed.", - desc: "User in Psychic Terrain: +1 Speed.", - }, - bonemerang: { - inherit: true, - onAfterMove(source) { - const item = source.lastItem || 'thickclub'; - source.lastItem = ''; - source.setItem(item); - this.add('-item', source, this.dex.items.get(item), '[from] move: Bonemerang'); - }, - shortDesc: "Returns last used item. Default Thick Club.", - desc: "Returns last used item. Defaults to Thick Club if none.", - }, - electricterrain: { - inherit: true, - condition: { - effectType: 'Terrain', - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onSetStatus(status, target, source, effect) { - if (status.id === 'slp' && target.isGrounded() && !target.isSemiInvulnerable()) { - if (effect.id === 'yawn' || (effect.effectType === 'Move' && !effect.secondaries)) { - this.add('-activate', target, 'move: Electric Terrain'); - } - return false; - } - }, - onTryAddVolatile(status, target) { - if (!target.isGrounded() || target.isSemiInvulnerable()) return; - if (status.id === 'yawn') { - this.add('-activate', target, 'move: Electric Terrain'); - return null; - } - }, - onBasePowerPriority: 6, - onBasePower(basePower, attacker, defender, move) { - if (move.type === 'Electric' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { - this.debug('electric terrain boost'); - return this.chainModify([5325, 4096]); - } - }, - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - this.add('-fieldstart', 'move: Electric Terrain', '[from] ability: ' + effect.name, `[of] ${source}`); - } else { - this.add('-fieldstart', 'move: Electric Terrain'); - } - }, - onDisableMove(pokemon) { - for (const moveSlot of pokemon.moveSlots) { - if (this.dex.moves.get(moveSlot.id).flags['heal']) { - pokemon.disableMove(moveSlot.id); - } - } - }, - onBeforeMovePriority: 6, - onBeforeMove(pokemon, target, move) { - if (move.flags['heal'] && !move.isZ && !move.isMax) { - this.add('cant', pokemon, 'move: Electric Terrain', move); - return false; - } - }, - onModifyMove(move, pokemon, target) { - if (move.flags['heal'] && !move.isZ && !move.isMax) { - this.add('cant', pokemon, 'move: Electric Terrain', move); - return false; - } - }, - onFieldResidualOrder: 27, - onFieldResidualSubOrder: 7, - onFieldEnd() { - this.add('-fieldend', 'move: Electric Terrain'); - }, - }, - shortDesc: "5 turns. Grounded: +Electric power, can't sleep, can't heal.", - desc: "5 turns. Grounded: +Electric power, can't sleep, can't use healing moves.", - }, - mistyterrain: { - inherit: true, - condition: { - effectType: 'Terrain', - duration: 5, - durationCallback(source, effect) { - if (source?.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onSetStatus(status, target, source, effect) { - if (!target.isGrounded() || target.isSemiInvulnerable()) return; - if (effect && ((effect as Move).status || effect.id === 'yawn')) { - this.add('-activate', target, 'move: Misty Terrain'); - } - return false; - }, - onTryAddVolatile(status, target, source, effect) { - if (!target.isGrounded() || target.isSemiInvulnerable()) return; - if (status.id === 'confusion') { - if (effect.effectType === 'Move' && !effect.secondaries) this.add('-activate', target, 'move: Misty Terrain'); - return null; - } - }, - onBasePowerPriority: 6, - onBasePower(basePower, attacker, defender, move) { - if (move.type === 'Dragon' && defender.isGrounded() && !defender.isSemiInvulnerable()) { - this.debug('misty terrain weaken'); - return this.chainModify(0.5); - } - if (move.type === 'Fairy' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { - this.debug('misty terrain boost'); - return this.chainModify([5325, 4096]); - } - }, - onFieldStart(field, source, effect) { - if (effect?.effectType === 'Ability') { - this.add('-fieldstart', 'move: Misty Terrain', '[from] ability: ' + effect.name, `[of] ${source}`); - } else { - this.add('-fieldstart', 'move: Misty Terrain'); - } - }, - onFieldResidualOrder: 27, - onFieldResidualSubOrder: 7, - onFieldEnd() { - this.add('-fieldend', 'Misty Terrain'); - }, - }, - shortDesc: "5 turns. Can't status,-Dragon power vs grounded, +Fairy power.", - desc: "5 turns. Can't status,-Dragon power vs grounded, +Fairy power.", - }, - lootbox: { - num: -1015, - accuracy: 100, - basePower: 0, - category: "Physical", - name: "Loot Box", - pp: 15, - priority: 0, - flags: { protect: 1, mirror: 1, metronome: 1 }, - onModifyMove(move, pokemon, target) { - const rand = this.random(8); - if (rand < 2) { - move.basePower = 0; - } else if (rand < 4) { - move.basePower = 60; - } else if (rand < 6) { - move.basePower = 120; - } else { - move.basePower = 150; - } - }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Explosion', target); - this.add('-anim', source, 'Mind Blown', target); - }, - target: "normal", - type: "Normal", - contestType: "Cute", - shortDesc: "Present but better.", - }, - sinisterarrows: { - num: -1016, - accuracy: 100, - basePower: 50, - category: "Physical", - name: "Sinister Arrows", - pp: 10, - priority: 0, - flags: { allyanim: 1, metronome: 1, futuremove: 1 }, - ignoreImmunity: true, - onTry(source, target) { - if (!target.side.addSlotCondition(target, 'sinisterarrows')) return false; - Object.assign(target.side.slotConditions[target.position]['sinisterarrows'], { - move: 'sinisterarrows', - source, - moveData: { - id: 'sinisterarrows', - name: "Sinister Arrows", - accuracy: 100, - basePower: 50, - category: "Physical", - priority: 0, - flags: { allyanim: 1, metronome: 1, futuremove: 1 }, - ignoreImmunity: false, - effectType: 'Move', - type: 'Ghost', - }, - }); - this.add('-start', source, 'move: Sinister Arrows'); - return this.NOT_FAIL; - }, - onTryMove(target, source, move) { - this.add('-anim', source, 'Curse', target); - this.add('-anim', source, 'Spite', target); - }, - condition: { - onStart(target) { - this.effectState.targetSlot = target.getSlot(); - this.effectState.endingTurn = (this.turn - 1) + 3; - }, - onResidualOrder: 5, - onResidualSubOrder: 2, - onResidual(target) { - const data = this.effectState; - // time's up; time to hit! :D - const move = this.dex.moves.get(data.move); - if (target.fainted || target === data.source) { - this.hint(`${move.name} did not hit because the target is ${(target.fainted ? 'fainted' : 'the user')}.`); - return; - } - if (!this.getOverflowedTurnCount()) return; - target.removeVolatile('Protect'); - target.removeVolatile('Endure'); - if (data.source.hasAbility('infiltrator') && this.gen >= 6) { - data.moveData.infiltrates = true; - } - if (data.source.hasAbility('normalize') && this.gen >= 6) { - data.moveData.type = 'Normal'; - } - const hitMove = new this.dex.Move(data.moveData) as ActiveMove; - this.actions.trySpreadMoveHit([target], data.source, hitMove, true); - this.hint(`${move.name} hits.`); - if (data.source.isActive && data.source.hasItem('lifeorb') && this.gen >= 5) { - this.singleEvent('AfterMoveSecondarySelf', data.source.getItem(), data.source.itemState, data.source, target, data.source.getItem()); - } - this.activeMove = null; - this.checkWin(); - if (this.getOverflowedTurnCount() >= this.effectState.endingTurn) { - target.side.removeSlotCondition(this.getAtSlot(this.effectState.targetSlot), 'sinisterarrows'); - } - }, - }, - target: "normal", - type: "Ghost", - contestType: "Clever", - shortDesc: "Hits for 4 turns, even if user switches out.", - }, - mortalspin: { - inherit: true, - category: "Special", - }, - lastbreakfast: { - num: -1020, - accuracy: 100, - basePower: 80, - category: "Physical", - name: "Last Breakfast", - pp: 15, - priority: 0, - flags: { protect: 1, mirror: 1, metronome: 1, contact: 1, bite: 1 }, - onHit(target, source, move) { - const numberBerries = 0 + 1 * Number(source.side.totalFainted); - for (let i = 0; i < numberBerries; i++) { - const possibleBerries = ['aguavberry', 'apicotberry', 'enigmaberry', 'figyberry', 'ganlonberry', 'iapapaberry', - 'keeberry', 'lansatberry', 'leppaberry', 'liechiberry', 'lumberry', 'magoberry', - 'marangaberry', 'micleberry', - 'oranberry', 'petayaberry', 'salacberry', 'sitrusberry', 'starfberry', 'wikiberry', - 'aspearberry', 'cheriberry', 'chestoberry', 'lumberry', 'pechaberry', 'rawstberry', 'persimberry']; - const chosenBerry = this.sample(possibleBerries); - const berry = this.dex.items.get(chosenBerry); - if (source.hp && berry.isBerry) { - if (this.singleEvent('Eat', berry, null, source, source, move)) { - this.runEvent('EatItem', source, source, move, berry); - } - if (berry.onEat) source.ateBerry = true; - } - } - }, - onTryMove() { - this.attrLastMove('[still]'); - }, - onPrepareHit(target, source) { - this.add('-anim', source, 'Curse', target); - this.add('-anim', source, 'Bug Bite', target); - }, - target: "normal", - type: "Ghost", - contestType: "Cute", - shortDesc: "Eats X random berries, where X is fainted teammates.", - }, - superfang: { - inherit: true, - flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1 }, - }, -}; +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { + ancientpower: { + inherit: true, + category: "Physical", + secondary: undefined, // no inherit + // Ancient Power is physical and boosts on-kill + onAfterMoveSecondarySelf(pokemon, target, move) { + if (!target || target.fainted || target.hp <= 0) { + this.boost({ atk: 1, def: 1, spa: 1, spd: 1, spe: 1 }, pokemon, pokemon, move); + } + }, + desc: "If this move causes the opponent to faint, raises the user's Attack, Defense, Special Attack, Special Defense, and Speed by 1 stage.", + shortDesc: "Raise all stats by 1 if this move KOs the target.", + }, + sandsearstorm: { + // Now always hits in Sand in addition to Rain + inherit: true, + onModifyMove(move, pokemon, target) { + if (target && ['raindance', 'sandstorm'].includes(target.effectiveWeather())) { + move.accuracy = true; + } + }, + }, + mountainmaw: { + // Copied from Psychic Fangs, just changed to be Rock type + num: -101, + accuracy: 100, + basePower: 85, + category: "Physical", + name: "Mountain Maw", + pp: 10, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onTryHit(pokemon) { + // will shatter screens through sub, before you hit + pokemon.side.removeSideCondition('reflect'); + pokemon.side.removeSideCondition('lightscreen'); + pokemon.side.removeSideCondition('auroraveil'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Crunch', target); + this.add('-anim', source, 'Rock Slide', target); + }, + target: "normal", + type: "Rock", + contestType: "Clever", + shortDesc: "Breaks Screens.", + desc: "Breaks Screens.", + }, + scavenge: { + num: -102, + accuracy: 100, + basePower: 100, + category: "Physical", + name: "Scavenge", + pp: 10, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + target: "normal", + type: "Poison", + contestType: "Tough", + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Thief', target); + }, + onAfterMove(source) { + if (source.lastItem) { + const item = source.lastItem; + source.lastItem = ''; + source.setItem(item); + this.add('-item', source, this.dex.items.get(item), '[from] move: Scavenge'); + } else { + return null; + } + }, + shortDesc: "User regains their last used item, similar to Recycle.", + desc: "If the user has consumed their item, it will be restored.", + }, + aquaring: { + inherit: true, + condition: { + onStart(pokemon) { + this.add('-start', pokemon, 'Aqua Ring'); + }, + onResidualOrder: 6, + onResidual(pokemon) { + this.heal(pokemon.baseMaxhp / 16); + }, + onSourceModifyAtkPriority: 5, + onSourceModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Fire') { + return this.chainModify(0.5); + } + }, + onSourceModifySpAPriority: 5, + onSourceModifySpA(atk, attacker, defender, move) { + if (move.type === 'Fire') { + return this.chainModify(0.5); + } + }, + onModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Water') { + return this.chainModify(2); + } + }, + onModifySpA(atk, attacker, defender, move) { + if (move.type === 'Water') { + return this.chainModify(2); + } + }, + }, + shortDesc: "2x Water power, 0.5x Fire damage, heal 1/16 HP per turn.", + desc: "User recovers 1/16 max HP per turn. While this is active, this Pokemon's Water power is 2x and Fire power against it is halved.", + }, + + ragingbull: { + num: 9999, + accuracy: 100, + basePower: 90, + category: "Physical", + priority: 0, + pp: 10, + name: "Raging Bull", + type: "Normal", + effectType: "Move", + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + shortDesc: "Type swaps to most effective (Water, Fighting, Fire, or Normal).", + desc: "Changes the move's and user's forme to the most effective against the target (Water, Fighting, Fire, or Normal).", + beforeMoveCallback(source, target, move) { + if (target) { + const typeEffectiveness: { [k: string]: number } = { + Normal: this.dex.getEffectiveness('Normal', target), + Water: this.dex.getEffectiveness('Water', target), + Fighting: this.dex.getEffectiveness('Fighting', target), + Fire: this.dex.getEffectiveness('Fire', target), + }; + let bestType = 'Normal'; + let type: keyof typeof typeEffectiveness; + let maxEffectiveness = -Infinity; + // gets most effective type against target (defaults to normal) + for (type in typeEffectiveness) { + if (typeEffectiveness[type] > maxEffectiveness) { + maxEffectiveness = typeEffectiveness[type]; + bestType = type; + } + } + // changes form to match most effective type + let forme = ''; + switch (bestType) { + case 'Water': forme = '-Paldea-Aqua'; break; + case 'Fighting': forme = '-Paldea-Combat'; break; + case 'Fire': forme = '-Paldea-Blaze'; break; + } + source.formeChange('Tauros' + forme); + this.add('-ability', source, 'Adaptability'); + source.m.ragingBullMoveType = bestType; + } + }, + // animation was remnant of Techno Blast code being copied, decided to keep because funny + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Techno Blast', target); + }, + // sets type properly (failsafe) + onModifyType(move, pokemon, target) { + if (pokemon.m.ragingBullMoveType) { + move.type = pokemon.m.ragingBullMoveType; + } + }, + target: "normal", + }, + iciclestorm: { + num: -1044, + accuracy: 95, + basePower: 90, + category: "Physical", + name: "Icicle Storm", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Ice Shard', target); + this.add('-anim', source, 'Ice Shard', target); + this.add('-anim', source, 'Ice Shard', target); + }, + self: { + onHit(source) { + this.field.setWeather('snowscape'); + }, + }, + target: "normal", + type: "Ice", + contestType: "Clever", + desc: "Sets Snow on-hit.", + shortDesc: "Sets Snow.", + }, + springtidestorm: { + // Now always hits in Sand in addition to Rain + inherit: true, + onModifyMove(move, pokemon, target) { + if (target && ['sandstorm', 'raindance'].includes(target.effectiveWeather())) { + move.accuracy = true; + } + }, + }, + // Poison type now + spitup: { + inherit: true, + type: "Poison", + }, + // clone of shell side arm (modified to be base Physical so the randbats algorithm gives Attack EVs to Phione + geyser: { + num: -104, + accuracy: 100, + basePower: 100, + category: "Physical", + name: "Geyser", + pp: 10, + priority: 0, + flags: { protect: 1, contact: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onModifyMove(move, pokemon, target) { + if (!target) return; + const atk = pokemon.getStat('atk', false, true); + const spa = pokemon.getStat('spa', false, true); + const def = target.getStat('def', false, true); + const spd = target.getStat('spd', false, true); + const physical = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * atk) / def) / 50); + const special = Math.floor(Math.floor(Math.floor(Math.floor(2 * pokemon.level / 5 + 2) * 90 * spa) / spd) / 50); + if (physical < special || (physical === special && this.randomChance(1, 2))) { + move.category = 'Special'; + move.flags.contact = undefined; + } + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Water Spout', target); + }, + onHit(target, source, move) { + // Shell Side Arm normally reveals its category via animation on cart, but doesn't play either custom animation against allies + if (!source.isAlly(target)) this.hint(move.category + " Geyser"); + }, + onAfterSubDamage(damage, target, source, move) { + if (!source.isAlly(target)) this.hint(move.category + " Geyser"); + }, + target: "normal", + type: "Water", + desc: "This move is Special + no contact if it would be stronger.", + shortDesc: "This move is Special + no contact if it would be stronger.", + }, + // Encore + Rain Dance + tidalsurge: { + num: -105, + accuracy: 100, + basePower: 0, + category: "Status", + name: "Tidal Surge", + pp: 10, + priority: 0, + flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Surf', target); + }, + onHit(target, source, move) { + this.add('-anim', source, 'Encore', target); + target.addVolatile('encore'); + }, + weather: 'raindance', + target: "normal", + type: "Water", + zMove: { boost: { spe: 1 } }, + contestType: "Beautiful", + desc: "Encore + Rain Dance", + shortDesc: "Encore + Rain Dance", + }, + // prio + double power if opponent is using a water move + bonsaibounce: { + num: -106, + accuracy: 100, + basePower: 70, + category: "Physical", + name: "Bonsai Bounce", + pp: 10, + priority: 0, + flags: { protect: 1, contact: 1, mirror: 1, metronome: 1 }, + // checks for water move usage from opponent + onModifyPriority(priority, source) { + // gets current foe in singles + const foe = source.foes()[0]; + if (!foe || foe.fainted) { + return priority; + } + // gets attack of foe this turn + const action = this.queue.willMove(foe); + if (!action || action.choice !== 'move') { + return priority; + } + const move = action.move; + if (move?.type === 'Water') { + return priority + 1; + } else { + return priority; + } + }, + // modifies base power + onBasePower(basePower, source, target) { + const foe = source.foes()[0]; + if (!foe || foe.fainted) { + return basePower; + } + const action = this.queue.willMove(foe); + if (!action || action.choice !== 'move') { + return basePower; + } + const move = action.move; + if (move?.type === 'Water') { + this.add('-message', `Sudowoodo draws power from the water!`); + return basePower + 70; + } else { + return basePower; + } + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Ivy Cudgel Rock', target); + this.add('-anim', source, 'Splash'); + }, + target: "normal", + type: "Rock", + contestType: "Beautiful", + shortDesc: "+1 Priority and 2x power if target uses Water move.", + desc: "If the target is using a Water type move, this move will always move first and gains double power.", + }, + ironstrike: { + // implemented via changes to Stealth Rocks and Spikes + num: -107, + accuracy: 100, + basePower: 50, + category: "Physical", + name: "Iron Strike", + pp: 15, + priority: 0, + flags: { protect: 1, contact: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Metal Claw', target); + }, + target: "normal", + type: "Steel", + contestType: "Beautiful", + shortDesc: "Inflicts damage from hazards on target's side.", + desc: "Target takes damage from all entry hazards on their side of the field, unless they are immune.", + }, + thunderkick: { + num: -1192, + name: "Thunder Kick", + type: "Electric", + basePower: 50, + accuracy: 100, + category: "Physical", + priority: 0, + pp: 5, + target: "normal", + contestType: "Beautiful", + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(t, s, m) { + this.add('-anim', s, 'High Jump Kick', t); + this.add('-anim', s, 'Thunder', t); + }, + flags: { contact: 1, protect: 1 }, + }, + thunderouskick: { + inherit: true, + secondary: undefined, // no inherit + onHit(target, source, move) { + // random # 0 or 1 + const randomNum = this.random(2); + // 50% chance to drop def + if (randomNum === 0) { + if (target.boosts.def !== -6) { + this.boost({ def: -1 }, target, source, move); + } + } else { + this.add('-message', `${source.name} follows up with a Thunder Kick!`); + // uses Thunder Kick + this.actions.useMove('thunderkick', source, { target }); + } + }, + desc: "50% chance to reduce Defense by 1, 50% chance to inflict an additional 50 BP Electric type damage.", + shortDesc: "50% -1 Defense, 50% extra 50 BP Electric damage.", + }, + stealthrock: { + num: 446, + accuracy: true, + basePower: 0, + category: "Status", + name: "Stealth Rock", + pp: 20, + priority: 0, + flags: { reflectable: 1, metronome: 1, mustpressure: 1 }, + sideCondition: 'stealthrock', + condition: { + // this is a side condition + onSideStart(side) { + this.add('-sidestart', side, 'move: Stealth Rock'); + }, + onSwitchIn(pokemon) { + // hardcode to prevent hazard damage during Order Up switches + enforce hazard damage while King of the Hill is active + if ((pokemon.hasItem('heavydutyboots') && !pokemon.side.getSideCondition('kingofthehill')) || + pokemon.side.getSideCondition('orderup')) return; + const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6); + this.damage(pokemon.maxhp * (2 ** typeMod) / 8); + }, + // iron strike functionality (reapplies stealth rock damage when hit with Iron Strike) + onHit(pokemon, source, move) { + if (move.id === 'ironstrike') { + if (pokemon.hasItem('heavydutyboots')) return; + const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6); + this.damage(pokemon.maxhp * (2 ** typeMod) / 8); + } + }, + }, + target: "foeSide", + type: "Rock", + zMove: { boost: { def: 1 } }, + contestType: "Cool", + }, + spikes: { + num: 191, + accuracy: true, + basePower: 0, + category: "Status", + name: "Spikes", + pp: 20, + priority: 0, + flags: { reflectable: 1, nonsky: 1, metronome: 1, mustpressure: 1 }, + sideCondition: 'spikes', + condition: { + // this is a side condition + onSideStart(side) { + this.add('-sidestart', side, 'Spikes'); + this.effectState.layers = 1; + }, + onSideRestart(side) { + if (this.effectState.layers >= 3) return false; + this.add('-sidestart', side, 'Spikes'); + this.effectState.layers++; + }, + onSwitchIn(pokemon) { + // Order Up + king of the hill functionality + if (((!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) && !pokemon.side.getSideCondition('kingofthehill')) || + pokemon.side.getSideCondition('orderup')) return; + const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 + this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24); + }, + // iron strike functionality + onHit(pokemon, source, move) { + if (move.id === 'ironstrike') { + if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return; + const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 + this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24); + } + }, + }, + target: "foeSide", + type: "Ground", + zMove: { boost: { def: 1 } }, + contestType: "Clever", + }, + orderup: { + num: 856, + accuracy: 100, + basePower: 80, + category: "Physical", + name: "Order Up", + pp: 10, + priority: 0, + flags: { protect: 1 }, + condition: { + duration: 2, + onSwitchInPriority: -1, + onSwitchIn(pokemon) { + // when Dondozo switches back in after eating, it gains boost + if (pokemon.baseSpecies.baseSpecies === 'Dondozo') { + // reapplies volatiles and stat boosts + if ((pokemon as any).storedVolatiles) { + for (const volatile in (pokemon as any).storedVolatiles) { + pokemon.addVolatile(volatile); + } + } + if ((pokemon as any).storedBoosts) { + for (const stat in (pokemon as any).storedBoosts) { + const change = (pokemon as any).storedBoosts[stat as BoostID]; + if (change !== 0) { + this.boost({ [stat]: change }, pokemon); + } + } + } + this.add('-message', `Dondozo enjoyed its meal!`); + // applies boost based on eaten mon stats + if (this.effectState.eatenBoost === 'atk' || this.effectState.eatenBoost === 'spa') { + this.boost({ atk: 3 }, pokemon); + } else if (this.effectState.eatenBoost === 'def' || this.effectState.eatenBoost === 'spd') { + this.boost({ def: 2, spd: 2 }, pokemon); + } else { + this.boost({ spe: 3 }, pokemon); + } + // adds volatile ordered, which prevents the order up effect from occurring again until Dondozo switches out + pokemon.addVolatile('ordered'); + // removes the side condition + pokemon.side.removeSideCondition('orderup'); + } else { + // after Dondozo switches out, this happens to the next pokemon that is switched in + const meal = pokemon; + // faints the eaten mon + pokemon.faint(); + // finds highest stat of eaten mon, stored in effectState eatenBoost + const stats = ['atk', 'def', 'spa', 'spd', 'spe']; + let highestStat = stats[0]; + let maxStatValue = meal.storedStats[highestStat as StatIDExceptHP]; + + for (const stat of stats) { + if (meal.storedStats[stat as StatIDExceptHP] > maxStatValue) { + highestStat = stat; + maxStatValue = meal.storedStats[stat as StatIDExceptHP]; + } + } + this.effectState.eatenBoost = highestStat; + } + }, + onFaint(pokemon) { + const side = pokemon.side; + const dondozo = side.pokemon.find(p => p.species.name === 'Dondozo' && !p.fainted); + if (!dondozo) return; + // forces Dondozo in after the eaten mon faints + this.queue.insertChoice({ + choice: 'switch', + pokemon, + target: dondozo, + }); + this.checkFainted(); + }, + }, + // when order up hits, first checks for volatile ordered to ensure that Order Up has not already been used, then starts orderup side condition and switches Dondozo out + onHit(target, source, move) { + if (source.volatiles['ordered']) return; + if (source.species.id === 'mew') return; + source.side.addSideCondition('orderup'); + // stores stat changes and volatiles to reapply after switch + (source as any).storedBoosts = { ...source.boosts }; + (source as any).storedVolatiles = {}; + for (const volatile in source.volatiles) { + (source as any).storedVolatiles[volatile] = source.volatiles[volatile]; + } + if (source.side.getSideCondition('orderup')) { + this.add('-ability', source, 'Order Up'); + this.add('-message', `Select the Pokemon you would like to eat. Its highest base stat affects the boost you gain from this move.`); + } + source.switchFlag = true; + }, + hasSheerForceBoost: true, + target: "normal", + type: "Dragon", + desc: "Dondozo eats a mon on the user's team, KOing it. Dondozo then gains a stat boost depending on the eaten mon's highest stat: +3 Attack for Atk/SpA, +2 Def/+2 SpD for Def/SpD, and +3 Speed for Speed.", + shortDesc: "Dondozo KOs an ally mon. Gain stat boost in ally's highest stat.", + }, + toxicspikes: { + // prevents Dondozo from being affected by Toxic Spikes during Order Up switching + inherit: true, + condition: { + // this is a side condition + onSideStart(side) { + this.add('-sidestart', side, 'move: Toxic Spikes'); + this.effectState.layers = 1; + }, + onSideRestart(side) { + if (this.effectState.layers >= 2) return false; + this.add('-sidestart', side, 'move: Toxic Spikes'); + this.effectState.layers++; + }, + onSwitchIn(pokemon) { + // hardcode for King of the Hill + if (!pokemon.isGrounded() && !pokemon.side.getSideCondition('kingofthehill')) return; + if (pokemon.hasType('Poison')) { + this.add('-sideend', pokemon.side, 'move: Toxic Spikes', `[of] ${pokemon}`); + pokemon.side.removeSideCondition('toxicspikes'); + // hardcode for King of the Hill and Order Up + } else if ( + pokemon.hasType('Steel') || + (pokemon.hasItem('heavydutyboots') && !pokemon.side.getSideCondition('kingofthehill')) || + pokemon.side.getSideCondition('orderup') + ) { + // do nothing + } else if (this.effectState.layers >= 2) { + pokemon.trySetStatus('tox', pokemon.side.foe.active[0]); + } else { + pokemon.trySetStatus('psn', pokemon.side.foe.active[0]); + } + }, + }, + }, + stickyweb: { + inherit: true, + condition: { + onSideStart(side) { + this.add('-sidestart', side, 'move: Sticky Web'); + }, + onSwitchIn(pokemon) { + // king of the hill + if ((!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) && + !pokemon.side.getSideCondition('kingofthehill')) return; + this.add('-activate', pokemon, 'move: Sticky Web'); + this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb')); + }, + }, + }, + shatteredseal: { + num: -1002, + accuracy: true, + basePower: 90, + category: "Physical", + name: "Shattered Seal", + pp: 15, + pseudoWeather: 'gravity', + priority: 0, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Spite', target); + this.add('-anim', source, 'Spirit Shackle', target); + }, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + target: "normal", + type: "Ghost", + contestType: "Clever", + desc: "Sets gravity.", + shortDesc: "Sets gravity.", + }, + alloutassault: { + num: -1003, + accuracy: 100, + basePower: 120, + category: "Physical", + name: "All-Out Assault", + pp: 5, + priority: 0, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'All-Out Pummeling', target); + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (!target || target.fainted || target.hp <= 0) { + this.boost({ atk: 1 }, pokemon, pokemon, move); + } else { + this.boost({ atk: -1 }, pokemon, pokemon, move); + } + }, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + target: "normal", + type: "Fighting", + contestType: "Clever", + desc: "If this move KOs the target, raise the user's attack by 1. Otherwise, lower attack by 1.", + shortDesc: "On KO: +1 Atk. Otherwise -1 Atk.", + }, + wickedblow: { + inherit: true, + beforeMoveCallback(source, target, move) { + if (target) { + this.effectState.surgingStrikesAlreadyUsed = 0; + this.add('-anim', source, 'Techno Blast', target); + const typeEffectiveness: { [k: string]: number } = { + Water: this.dex.getEffectiveness('Water', target), + Dark: this.dex.getEffectiveness('Dark', target), + }; + let type: keyof typeof typeEffectiveness; + let bestType = 'Water'; + let maxEffectiveness = -Infinity; + // gets most effective type against target (defaults to the current type) + for (type in typeEffectiveness) { + if (typeEffectiveness[type] > maxEffectiveness) { + maxEffectiveness = typeEffectiveness[type]; + bestType = type; + } + } + // changes form to match most effective type + if (bestType === 'Dark') { + this.add('-message', `Urshifu takes pity on its foe and transforms into a weaker type!`); + source.formeChange('Urshifu-Rapid-Strike', null, true); + source.setAbility('Sniper'); + this.add('-ability', source, 'Sniper'); + const oldMove = 'wickedblow'; + const newMove = 'surgingstrikes'; + const oldMoveId = this.toID(oldMove); + const newMoveData = this.dex.moves.get(newMove); + const oldMoveIdx = source.moveSlots.findIndex(x => x.id === oldMoveId); + if (oldMoveIdx >= 0) { + source.moveSlots[oldMoveIdx] = source.baseMoveSlots[oldMoveIdx] = { + move: newMoveData.name, + id: newMoveData.id, + pp: newMoveData.pp, + maxpp: newMoveData.pp, + target: newMoveData.target, + disabled: false, + used: false, + }; + } + this.actions.useMove('surgingstrikes', source, { target }); + this.effectState.surgingStrikesAlreadyUsed = 1; + } + } + }, + onTry(source, target, move) { + if (this.effectState.surgingStrikesAlreadyUsed === 1) { + return null; + } + }, + desc: "This move will transform into Rapid Strike Urshifu/Surging Strikes if it would be less effective against the target.", + shortDesc: "Becomes Surging Strikes if it would be less effective.", + }, + surgingstrikes: { + inherit: true, + beforeMoveCallback(source, target, move) { + if (source.species.id === 'araquanid') return; + if (target) { + this.effectState.wickedBlowAlreadyUsed = 0; + this.add('-anim', source, 'Techno Blast', target); + const typeEffectiveness: { [k: string]: number } = { + Dark: this.dex.getEffectiveness('Dark', target), + Water: this.dex.getEffectiveness('Water', target), + }; + let type: keyof typeof typeEffectiveness; + let bestType = 'Dark'; + let maxEffectiveness = -Infinity; + // gets most effective type against target (defaults to the current type) + for (type in typeEffectiveness) { + if (typeEffectiveness[type] > maxEffectiveness) { + maxEffectiveness = typeEffectiveness[type]; + bestType = type; + } + } + // changes form to match most effective type + if (bestType === 'Water') { + this.add('-message', `Urshifu takes pity on its foe and transforms into a weaker type!`); + source.formeChange('Urshifu', null, true); + source.setAbility('Sniper'); + this.add('-ability', source, 'Sniper'); + const newMove = 'wickedblow'; + const oldMoveId: ID = 'surgingstrikes' as ID; + const newMoveData = this.dex.moves.get(newMove); + const oldMoveIdx = source.moveSlots.findIndex(x => x.id === oldMoveId); + if (oldMoveIdx >= 0) { + source.moveSlots[oldMoveIdx] = source.baseMoveSlots[oldMoveIdx] = { + move: newMoveData.name, + id: newMoveData.id, + pp: newMoveData.pp, + maxpp: newMoveData.pp, + target: newMoveData.target, + disabled: false, + used: false, + }; + } + this.actions.useMove('wickedblow', source, { target }); + this.effectState.wickedBlowAlreadyUsed = 1; + } + } + }, + onTry(source, target, move) { + if (this.effectState.wickedBlowAlreadyUsed === 1) { + return null; + } + }, + desc: "This move will transform into Single Strike Urshifu/Wicked Blow if it would be less effective against the target. Does not work with Araquanid.", + shortDesc: "Becomes Wicked Blow if it would be less effective.", + }, + twister: { + num: 239, + accuracy: 100, + basePower: 80, + category: "Special", + name: "Twister", + pp: 20, + priority: 0, + onHit(target, source, move) { + let success = !!this.boost({ evasion: -1 }); + const removeAll = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; + const removeTarget = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', ...removeAll]; + for (const targetCondition of removeTarget) { + if (target.side.removeSideCondition(targetCondition)) { + if (!removeAll.includes(targetCondition)) continue; + this.add('-sideend', target.side, this.dex.conditions.get(targetCondition).name, '[from] move: Defog', `[of] ${source}`); + success = true; + } + } + for (const sideCondition of removeAll) { + if (source.side.removeSideCondition(sideCondition)) { + this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Defog', `[of] ${source}`); + success = true; + } + } + this.field.clearTerrain(); + return success; + }, + flags: { protect: 1, mirror: 1, metronome: 1, wind: 1 }, + target: "allAdjacentFoes", + type: "Dragon", + contestType: "Cool", + desc: "Removes hazards, side conditions, and terrain. Lowers Evasion by 1.", + shortDesc: "-1 evasion; ends user and target hazards/terrain.", + }, + magnetbomb: { + num: 443, + accuracy: true, + basePower: 90, + category: "Special", + name: "Magnet Bomb", + pp: 20, + priority: 0, + onHit(target, source, move) { + target.setType('Steel'); + this.add('-start', target, 'typechange', 'Steel'); + }, + flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 }, + target: "normal", + type: "Steel", + contestType: "Cool", + desc: "Changes the target's type to Steel.", + shortDesc: "Changes the target's type to Steel.", + }, + triplekick: { + inherit: true, + basePower: 20, + basePowerCallback(pokemon, target, move) { + return 20 * move.hit; + }, + }, + freezingglare: { + inherit: true, + secondary: { + chance: 30, + onHit(target, source, move) { + if (!target.hasType('Ice')) { + target.trySetStatus('frostbite', source, move); + } + }, + }, + desc: "30% chance to inflict Frostbite.", + shortDesc: "30% chance to inflict Frostbite.", + }, + zippyzap: { + inherit: true, + category: "Special", + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Extreme Speed', target); + this.add('-anim', source, 'Thunder', target); + }, + secondary: undefined, // no inherit + desc: "Nearly always goes first.", + shortDesc: "Nearly always goes first.", + }, + burnout: { + num: -1004, + accuracy: 100, + basePower: 70, + category: "Special", + name: "Burn Out", + pp: 20, + priority: 0, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Fire Spin', target); + }, + onHit(target, source, move) { + if (source.species.id === 'jolteon' || source.species.id === 'vaporeon') { + this.add('-message', `Eevee uses its Fire Stone!`); + const currentHP = source.hp / source.maxhp; + source.formeChange('Flareon', null, true); + source.sethp(source.maxhp * currentHP); + this.add('-sethp', source, source.getHealth, '[from] move: Flip Turn', '[silent]'); + // target.setAbility('Eeveelution'); + // target.baseAbility = target.ability; + const newMoves = ['flipturn', 'voltswitch', 'sizzlyslide', 'facade']; + // Update move slots + // eslint-disable-next-line @typescript-eslint/no-shadow + source.moveSlots = newMoves.map(move => { + const moveData = this.dex.moves.get(move); + return { + move: moveData.name, + id: moveData.id, + pp: moveData.pp, + maxpp: moveData.pp, + target: moveData.target, + disabled: false, + used: false, + }; + }); + // this forces the UI to update move slots visually + (source as any).baseMoveSlots = source.moveSlots.slice(); + } + }, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + selfSwitch: true, + target: "normal", + type: "Fire", + contestType: "Cute", + desc: "User switches out after damaging the target.", + shortDesc: "User switches out after damaging the target.", + }, + voltswitch: { + inherit: true, + onHit(target, source, move) { + if (source.species.id === 'flareon' || source.species.id === 'vaporeon') { + this.add('-message', `Eevee uses its Thunder Stone!`); + const currentHP = source.hp / source.maxhp; + source.formeChange('Jolteon', null, true); + source.sethp(source.maxhp * currentHP); + this.add('-sethp', source, source.getHealth, '[from] move: Flip Turn', '[silent]'); + // target.setAbility('Eeveelution'); + // target.baseAbility = target.ability; + const newMoves = ['flipturn', 'burnout', 'zippyzap', 'freezyfrost']; + // Update move slots + // eslint-disable-next-line @typescript-eslint/no-shadow + source.moveSlots = newMoves.map(move => { + const moveData = this.dex.moves.get(move); + return { + move: moveData.name, + id: moveData.id, + pp: moveData.pp, + maxpp: moveData.pp, + target: moveData.target, + disabled: false, + used: false, + }; + }); + // this forces the UI to update move slots visually + (source as any).baseMoveSlots = source.moveSlots.slice(); + } + }, + }, + flipturn: { + inherit: true, + onHit(target, source, move) { + if (source.species.id === 'jolteon' || source.species.id === 'flareon') { + this.add('-message', `Eevee uses its Water Stone!`); + const currentHP = source.hp / source.maxhp; + source.formeChange('Vaporeon', null, true); + source.sethp(source.maxhp * currentHP); + this.add('-sethp', source, source.getHealth, '[from] move: Flip Turn', '[silent]'); + // target.setAbility('Eeveelution'); + // target.baseAbility = target.ability; + const newMoves = ['voltswitch', 'burnout', 'recover', 'scald']; + // Update move slots + // eslint-disable-next-line @typescript-eslint/no-shadow + source.moveSlots = newMoves.map(move => { + const moveData = this.dex.moves.get(move); + return { + move: moveData.name, + id: moveData.id, + pp: moveData.pp, + maxpp: moveData.pp, + target: moveData.target, + disabled: false, + used: false, + }; + }); + // this forces the UI to update move slots visually + (source as any).baseMoveSlots = source.moveSlots.slice(); + } + }, + }, + sizzlyslide: { + inherit: true, + basePower: 80, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Flame Charge', target); + }, + }, + freezyfrost: { + inherit: true, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Blizzard', target); + }, + }, + bouncybubble: { + inherit: true, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Bubble Beam', target); + }, + }, + purify: { + inherit: true, + pp: 10, + flags: { reflectable: 1, heal: 1, metronome: 1 }, + onHit(target, source) { + const foe = source.side.foe.active[0]; + if (foe && !foe.fainted && foe.status) { + this.heal(Math.ceil(source.maxhp * 0.5), source); + } else { + this.heal(Math.ceil(source.maxhp * 0.25), source); + } + }, + target: "self", + desc: "Heals for 25% HP, or 50% if foe is statused.", + shortDesc: "Heals for 25% HP, or 50% if foe is statused.", + }, + saltcurse: { + num: -1006, + accuracy: 100, + basePower: 70, + basePowerCallback(pokemon, target, move) { + if (target.status === 'par') { + this.debug('BP doubled on paralyzed target'); + return move.basePower * 2; + } + return move.basePower; + }, + onEffectiveness(typeMod, target, type) { + if (type === 'Water') return 1; + if (type === 'Steel') return 1; + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Glare', target); + this.add('-anim', source, 'Ivy Cudgel Rock', target); + }, + category: "Physical", + name: "Salt Curse", + pp: 10, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + target: "normal", + type: "Rock", + contestType: "Tough", + desc: "Double power if target is Paralyzed. Super-effective against Water and Steel.", + shortDesc: "2x BP if target is Paralyzed, Water type, or Steel type.", + }, + flyby: { + num: -1006, + accuracy: 100, + basePower: 70, + category: "Special", + name: "Fly-by", + pp: 20, + priority: 0, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dual Wingbeat', target); + }, + flags: { protect: 1, mirror: 1, metronome: 1 }, + selfSwitch: true, + secondary: { + chance: 50, + boosts: { + atk: -1, + }, + }, + target: "normal", + type: "Flying", + contestType: "Cute", + desc: "User switches out. Target: -1 Attack.", + shortDesc: "User switches out. Target: -1 Attack.", + }, + silktrap: { + inherit: true, + condition: { + duration: 1, + onStart(target) { + this.add('-singleturn', target, 'Protect'); + }, + onTryHitPriority: 3, + onTryHit(target, source, move) { + if (this.checkMoveBypassesProtect(move, source, target, false)) return; + if (move.smartTarget) { + move.smartTarget = false; + } else { + this.add('-activate', target, 'move: Protect'); + } + const lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + if (this.checkMoveMakesContact(move, source, target)) { + source.side.addSideCondition('stickyweb'); + } + return this.NOT_FAIL; + }, + onHit(target, source, move) { + if (move.isZOrMaxPowered && this.checkMoveMakesContact(move, source, target)) { + source.side.addSideCondition('stickyweb'); + } + }, + }, + desc: "Protect. If contact: set Sticky Web.", + shortDesc: "Protect. If contact: set Sticky Web.", + }, + heatsink: { + num: -1007, + accuracy: 100, + basePower: 80, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Fire Spin', target); + this.add('-anim', source, 'Bitter Blade', target); + }, + onModifyMove(move, source, target) { + if (target?.status === 'brn') { + move.drain = [3, 4]; + } + }, + category: "Special", + name: "Heat Sink", + pp: 20, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + drain: [1, 2], + target: "normal", + type: "Fire", + zMove: { basePower: 160 }, + contestType: "Clever", + desc: "50% drain. 75% drain instead if target is Burned.", + shortDesc: "50% drain. 75% drain if target is Burned.", + }, + terastarstorm: { + inherit: true, + onModifyType(move, pokemon) { + const types = pokemon.getTypes(); + let type = types[0]; + if (type === 'Bird') type = '???'; + if (type === '???' && types[1]) type = types[1]; + move.type = type; + if (pokemon.species.name === 'Terapagos-Stellar') { + move.type = 'Stellar'; + if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) { + move.category = 'Physical'; + } + } + }, + desc: "Type varies based on the user's primary type.", + shortDesc: "Type varies based on the user's primary type.", + }, + grabapple: { + num: -1008, + accuracy: 100, + basePower: 100, + category: "Physical", + name: "Grab Apple", + pp: 10, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + target: "normal", + type: "Grass", + contestType: "Tough", + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Grav Apple', target); + this.add('-anim', source, 'Thief', target); + }, + onAfterMove(source) { + if (source.lastItem) { + const item = source.lastItem; + source.lastItem = ''; + source.setItem(item); + this.add('-item', source, this.dex.items.get(item), '[from] move: Grab Apple'); + } else { + return null; + } + }, + shortDesc: "User regains their last used item, similar to Recycle.", + desc: "If the user has consumed their item, it will be restored.", + }, + sashimishuffle: { + num: -1009, + accuracy: true, + basePower: 0, + category: "Status", + name: "Sashimi Shuffle", + pp: 5, + priority: 0, + flags: { metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Order Up', target); + this.add('-anim', source, 'Order Up', target); + }, + onHit(target) { + if (!this.canSwitch(target.side) || target.volatiles['commanded']) { + this.attrLastMove('[still]'); + this.add('-fail', target); + return this.NOT_FAIL; + } + }, + self: { + onHit(source) { + source.skipBeforeSwitchOutEventFlag = true; + }, + }, + selfSwitch: true, + slotCondition: 'sashimishuffle', + condition: { + onSwitchIn(target) { + this.singleEvent('Swap', this.effect, this.effectState, target); + }, + onSwap(target) { + if (!target.fainted) { + target.heal(target.maxhp / 3); + this.add('-heal', target, target.getHealth, '[from] move: Sashimi Shuffle'); + target.side.removeSlotCondition(target, 'sashimishuffle'); + } + }, + }, + target: "self", + type: "Normal", + zMove: { effect: 'clearnegativeboost' }, + contestType: "Cute", + shortDesc: "User switches. Next Pokemon heals 1/3 HP.", + desc: "User switches. Next Pokemon heals 1/3 HP.", + }, + technoblast: { + inherit: true, + basePowerCallback(pokemon, target, move) { + if (this.field.isWeather('snowscape')) { + return move.basePower * 1.3; + } else return move.basePower; + }, + }, + crowverload: { + num: -1010, + accuracy: 100, + basePower: 12, + category: "Physical", + name: "Crowverload", + pp: 10, + priority: -4, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Glare', target); + this.add('-anim', source, 'X-Scissor', target); + }, + onTryHit(source, target, move) { + if (source.volatiles['substitute']) { + this.add('-fail', source, 'move: Crowverload'); + return this.NOT_FAIL; + } + }, + onAfterMove(source, target, move) { + this.actions.useMove('substitute', source, { }); + // source.addVolatile['substitute']; + // this.damage(Math.ceil(source.maxhp / 4)); + }, + flags: { protect: 1, mirror: 1, metronome: 1 }, + multihit: [10, 10], + target: "normal", + type: "Dark", + zMove: { basePower: 140 }, + maxMove: { basePower: 130 }, + contestType: "Tough", + shortDesc: "Hits 10 times. User creates a Substitute.", + desc: "Hits 10 times. User creates a Substitute.", + }, + naturesfury: { + num: -1011, + accuracy: true, + basePower: 0, + category: "Status", + name: "Nature's Fury", + pp: 20, + priority: 0, + flags: { failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1 }, + onModifyPriority(priority, source, target, move) { + if (this.field.isTerrain('electricterrain')) { + return priority + 1; + } else if (this.field.isTerrain('grassyterrain')) { + return priority + 1; + } else if (this.field.isTerrain('mistyterrain')) { + return priority + 1; + } else if (this.field.isTerrain('psychicterrain')) { + return priority; + } else { + return priority + 2; + } + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onTryHit(target, pokemon) { + let move = 'extremespeed'; + if (this.field.isTerrain('electricterrain')) { + move = 'lightningleap'; + } else if (this.field.isTerrain('grassyterrain')) { + move = 'grassyglide'; + } else if (this.field.isTerrain('mistyterrain')) { + move = 'mistymarch'; + } else if (this.field.isTerrain('psychicterrain')) { + move = 'wackywhack'; + } + this.actions.useMove(move, pokemon, { target }); + return null; + }, + callsMove: true, + target: "normal", + type: "Normal", + contestType: "Beautiful", + shortDesc: "Move used depends on Terrain.", + desc: "Move used depends on Terrain.", + }, + mistymarch: { + num: -1012, + accuracy: 100, + basePower: 55, + category: "Physical", + name: "Misty March", + pp: 20, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Play Rough', target); + }, + onModifyPriority(priority, source, target, move) { + if (this.field.isTerrain('mistyterrain') && source.isGrounded()) { + return priority + 1; + } + }, + target: "normal", + type: "Fairy", + contestType: "Cool", + shortDesc: "User on Misty Terrain: +1 priority.", + desc: "User on Misty Terrain: +1 priority.", + }, + lightningleap: { + num: -1013, + accuracy: 100, + basePower: 55, + category: "Physical", + name: "Lightning Leap", + pp: 20, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Volt Tackle', target); + }, + onModifyPriority(priority, source, target, move) { + if (this.field.isTerrain('electricterrain') && source.isGrounded()) { + return priority + 1; + } + }, + target: "normal", + type: "Electric", + contestType: "Cool", + shortDesc: "User on Electric Terrain: +1 priority.", + desc: "User on Electric Terrain: +1 priority.", + }, + wackywhack: { + num: -1014, + accuracy: 100, + basePower: 80, + category: "Physical", + name: "Wacky Whack", + pp: 20, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Zed Headbutt', target); + this.add('-anim', source, 'Thief', target); + }, + onAfterMoveSecondarySelf(source, target, move) { + if (this.field.isTerrain('psychicterrain') && source.isGrounded()) { + this.boost({ spe: 1 }, source, source); + } + }, + target: "normal", + type: "Psychic", + contestType: "Cool", + shortDesc: "User in Psychic Terrain: +1 Speed.", + desc: "User in Psychic Terrain: +1 Speed.", + }, + bonemerang: { + inherit: true, + onAfterMove(source) { + const item = source.lastItem || 'thickclub'; + source.lastItem = ''; + source.setItem(item); + this.add('-item', source, this.dex.items.get(item), '[from] move: Bonemerang'); + }, + shortDesc: "Returns last used item. Default Thick Club.", + desc: "Returns last used item. Defaults to Thick Club if none.", + }, + electricterrain: { + inherit: true, + condition: { + effectType: 'Terrain', + duration: 5, + durationCallback(source, effect) { + if (source?.hasItem('terrainextender')) { + return 8; + } + return 5; + }, + onSetStatus(status, target, source, effect) { + if (status.id === 'slp' && target.isGrounded() && !target.isSemiInvulnerable()) { + if (effect.id === 'yawn' || (effect.effectType === 'Move' && !effect.secondaries)) { + this.add('-activate', target, 'move: Electric Terrain'); + } + return false; + } + }, + onTryAddVolatile(status, target) { + if (!target.isGrounded() || target.isSemiInvulnerable()) return; + if (status.id === 'yawn') { + this.add('-activate', target, 'move: Electric Terrain'); + return null; + } + }, + onBasePowerPriority: 6, + onBasePower(basePower, attacker, defender, move) { + if (move.type === 'Electric' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { + this.debug('electric terrain boost'); + return this.chainModify([5325, 4096]); + } + }, + onFieldStart(field, source, effect) { + if (effect?.effectType === 'Ability') { + this.add('-fieldstart', 'move: Electric Terrain', '[from] ability: ' + effect.name, `[of] ${source}`); + } else { + this.add('-fieldstart', 'move: Electric Terrain'); + } + }, + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.dex.moves.get(moveSlot.id).flags['heal']) { + pokemon.disableMove(moveSlot.id); + } + } + }, + onBeforeMovePriority: 6, + onBeforeMove(pokemon, target, move) { + if (move.flags['heal'] && !move.isZ && !move.isMax) { + this.add('cant', pokemon, 'move: Electric Terrain', move); + return false; + } + }, + onModifyMove(move, pokemon, target) { + if (move.flags['heal'] && !move.isZ && !move.isMax) { + this.add('cant', pokemon, 'move: Electric Terrain', move); + return false; + } + }, + onFieldResidualOrder: 27, + onFieldResidualSubOrder: 7, + onFieldEnd() { + this.add('-fieldend', 'move: Electric Terrain'); + }, + }, + shortDesc: "5 turns. Grounded: +Electric power, can't sleep, can't heal.", + desc: "5 turns. Grounded: +Electric power, can't sleep, can't use healing moves.", + }, + mistyterrain: { + inherit: true, + condition: { + effectType: 'Terrain', + duration: 5, + durationCallback(source, effect) { + if (source?.hasItem('terrainextender')) { + return 8; + } + return 5; + }, + onSetStatus(status, target, source, effect) { + if (!target.isGrounded() || target.isSemiInvulnerable()) return; + if (effect && ((effect as Move).status || effect.id === 'yawn')) { + this.add('-activate', target, 'move: Misty Terrain'); + } + return false; + }, + onTryAddVolatile(status, target, source, effect) { + if (!target.isGrounded() || target.isSemiInvulnerable()) return; + if (status.id === 'confusion') { + if (effect.effectType === 'Move' && !effect.secondaries) this.add('-activate', target, 'move: Misty Terrain'); + return null; + } + }, + onBasePowerPriority: 6, + onBasePower(basePower, attacker, defender, move) { + if (move.type === 'Dragon' && defender.isGrounded() && !defender.isSemiInvulnerable()) { + this.debug('misty terrain weaken'); + return this.chainModify(0.5); + } + if (move.type === 'Fairy' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { + this.debug('misty terrain boost'); + return this.chainModify([5325, 4096]); + } + }, + onFieldStart(field, source, effect) { + if (effect?.effectType === 'Ability') { + this.add('-fieldstart', 'move: Misty Terrain', '[from] ability: ' + effect.name, `[of] ${source}`); + } else { + this.add('-fieldstart', 'move: Misty Terrain'); + } + }, + onFieldResidualOrder: 27, + onFieldResidualSubOrder: 7, + onFieldEnd() { + this.add('-fieldend', 'Misty Terrain'); + }, + }, + shortDesc: "5 turns. Can't status,-Dragon power vs grounded, +Fairy power.", + desc: "5 turns. Can't status,-Dragon power vs grounded, +Fairy power.", + }, + lootbox: { + num: -1015, + accuracy: 100, + basePower: 0, + category: "Physical", + name: "Loot Box", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + onModifyMove(move, pokemon, target) { + const rand = this.random(8); + if (rand < 2) { + move.basePower = 0; + } else if (rand < 4) { + move.basePower = 60; + } else if (rand < 6) { + move.basePower = 120; + } else { + move.basePower = 150; + } + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Explosion', target); + this.add('-anim', source, 'Mind Blown', target); + }, + target: "normal", + type: "Normal", + contestType: "Cute", + shortDesc: "Present but better.", + }, + sinisterarrows: { + num: -1016, + accuracy: 100, + basePower: 50, + category: "Physical", + name: "Sinister Arrows", + pp: 10, + priority: 0, + flags: { allyanim: 1, metronome: 1, futuremove: 1 }, + ignoreImmunity: true, + onTry(source, target) { + if (!target.side.addSlotCondition(target, 'sinisterarrows')) return false; + Object.assign(target.side.slotConditions[target.position]['sinisterarrows'], { + move: 'sinisterarrows', + source, + moveData: { + id: 'sinisterarrows', + name: "Sinister Arrows", + accuracy: 100, + basePower: 50, + category: "Physical", + priority: 0, + flags: { allyanim: 1, metronome: 1, futuremove: 1 }, + ignoreImmunity: false, + effectType: 'Move', + type: 'Ghost', + }, + }); + this.add('-start', source, 'move: Sinister Arrows'); + return this.NOT_FAIL; + }, + onTryMove(target, source, move) { + this.add('-anim', source, 'Curse', target); + this.add('-anim', source, 'Spite', target); + }, + condition: { + onStart(target) { + this.effectState.targetSlot = target.getSlot(); + this.effectState.endingTurn = (this.turn - 1) + 3; + }, + onResidualOrder: 5, + onResidualSubOrder: 2, + onResidual(target) { + const data = this.effectState; + // time's up; time to hit! :D + const move = this.dex.moves.get(data.move); + if (target.fainted || target === data.source) { + this.hint(`${move.name} did not hit because the target is ${(target.fainted ? 'fainted' : 'the user')}.`); + return; + } + if (!this.getOverflowedTurnCount()) return; + target.removeVolatile('Protect'); + target.removeVolatile('Endure'); + if (data.source.hasAbility('infiltrator') && this.gen >= 6) { + data.moveData.infiltrates = true; + } + if (data.source.hasAbility('normalize') && this.gen >= 6) { + data.moveData.type = 'Normal'; + } + const hitMove = new this.dex.Move(data.moveData) as ActiveMove; + this.actions.trySpreadMoveHit([target], data.source, hitMove, true); + this.hint(`${move.name} hits.`); + if (data.source.isActive && data.source.hasItem('lifeorb') && this.gen >= 5) { + this.singleEvent('AfterMoveSecondarySelf', data.source.getItem(), data.source.itemState, data.source, target, data.source.getItem()); + } + this.activeMove = null; + this.checkWin(); + if (this.getOverflowedTurnCount() >= this.effectState.endingTurn) { + target.side.removeSlotCondition(this.getAtSlot(this.effectState.targetSlot), 'sinisterarrows'); + } + }, + }, + target: "normal", + type: "Ghost", + contestType: "Clever", + shortDesc: "Hits for 4 turns, even if user switches out.", + }, + mortalspin: { + inherit: true, + category: "Special", + }, + lastbreakfast: { + num: -1020, + accuracy: 100, + basePower: 80, + category: "Physical", + name: "Last Breakfast", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1, contact: 1, bite: 1 }, + onHit(target, source, move) { + const numberBerries = 0 + 1 * Number(source.side.totalFainted); + for (let i = 0; i < numberBerries; i++) { + const possibleBerries = ['aguavberry', 'apicotberry', 'enigmaberry', 'figyberry', 'ganlonberry', 'iapapaberry', + 'keeberry', 'lansatberry', 'leppaberry', 'liechiberry', 'lumberry', 'magoberry', + 'marangaberry', 'micleberry', + 'oranberry', 'petayaberry', 'salacberry', 'sitrusberry', 'starfberry', 'wikiberry', + 'aspearberry', 'cheriberry', 'chestoberry', 'lumberry', 'pechaberry', 'rawstberry', 'persimberry']; + const chosenBerry = this.sample(possibleBerries); + const berry = this.dex.items.get(chosenBerry); + if (source.hp && berry.isBerry) { + if (this.singleEvent('Eat', berry, null, source, source, move)) { + this.runEvent('EatItem', source, source, move, berry); + } + if (berry.onEat) source.ateBerry = true; + } + } + }, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Curse', target); + this.add('-anim', source, 'Bug Bite', target); + }, + target: "normal", + type: "Ghost", + contestType: "Cute", + shortDesc: "Eats X random berries, where X is fainted teammates.", + }, + superfang: { + inherit: true, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1 }, + }, +}; diff --git a/data/mods/chatbats/pokedex.ts b/data/mods/chatbats/pokedex.ts index 6d4f878feb..490bd7b3f5 100644 --- a/data/mods/chatbats/pokedex.ts +++ b/data/mods/chatbats/pokedex.ts @@ -1,514 +1,514 @@ -export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { - volcarona: { - inherit: true, - abilities: { 0: "Fluffy" }, - }, - golemalola: { - inherit: true, - }, - lurantis: { - inherit: true, - baseStats: { hp: 85, atk: 105, def: 90, spa: 95, spd: 90, spe: 75 }, - }, - ironcrown: { - inherit: true, - abilities: { 0: "Queenly Majesty", H: "Battle Armor" }, - }, - mamoswine: { - inherit: true, - }, - ceruledge: { - inherit: true, - }, - carbink: { - inherit: true, - abilities: { 0: "Magic Bounce" }, - }, - moltres: { - inherit: true, - abilities: { 0: "Magic Guard" }, - }, - kommoo: { - inherit: true, - baseStats: { hp: 75, atk: 100, def: 125, spa: 110, spd: 105, spe: 85 }, - abilities: { 0: "Punk Rock" }, - }, - illumise: { - inherit: true, - abilities: { 0: "Call Volbeat" }, - }, - volbeat: { - inherit: true, - abilities: { 0: "Call Illumise" }, - }, - abomasnow: { - inherit: true, - }, - abomasnowmega: { - inherit: true, - baseStats: { hp: 90, atk: 132, def: 105, spa: 92, spd: 105, spe: 70 }, - abilities: { 0: "Slush Rush" }, - }, - dugtrio: { - inherit: true, - }, - altaria: { - inherit: true, - abilities: { 0: "Fluffy" }, - }, - altariamega: { - inherit: true, - }, - tyranitar: { - inherit: true, - abilities: { 0: "Sand Stream", H: "Sharpness" }, - }, - tyranitarmega: { - inherit: true, - baseStats: { hp: 100, atk: 114, def: 150, spa: 155, spd: 110, spe: 71 }, - types: ["Rock", "Dragon"], - }, - mimikyu: { - inherit: true, - baseStats: { hp: 65, atk: 110, def: 80, spa: 50, spd: 105, spe: 96 }, - }, - mimikyubusted: { - inherit: true, - abilities: { 0: "Perish Body" }, - baseStats: { hp: 65, atk: 90, def: 80, spa: 50, spd: 105, spe: 116 }, - }, - mesprit: { - inherit: true, - abilities: { 0: "Liquid Voice" }, - types: ["Psychic", "Water"], - }, - electrode: { - inherit: true, - abilities: { 0: "Short Fuse" }, - types: ["Electric", "Normal"], - }, - taurospaldeacombat: { - inherit: true, - abilities: { 0: "Adaptability" }, - }, - chiyu: { - inherit: true, - abilities: { 0: "Water Absorb" }, - baseStats: { hp: 55, atk: 135, def: 80, spa: 80, spd: 120, spe: 100 }, - }, - wochien: { - inherit: true, - abilities: { 0: "Liquid Ooze" }, - types: ["Grass", "Water"], - }, - staraptor: { - inherit: true, - types: ["Flying"], - }, - archaludon: { - inherit: true, - abilities: { 0: "Hydroelectric Dam", 1: "Stamina" }, - }, - malamar: { - inherit: true, - abilities: { 0: "Flip Flop" }, - baseStats: { hp: 86, atk: 92, def: 88, spa: 88, spd: 75, spe: 73 }, - }, - empoleon: { - inherit: true, - abilities: { 0: "Sharpness" }, - types: ["Water", "Steel", "Flying"], - }, - glastrier: { - inherit: true, - abilities: { 0: "Frozen Armor" }, - }, - calyrexice: { - inherit: true, - baseStats: { hp: 100, atk: 165, def: 130, spa: 85, spd: 110, spe: 90 }, - }, - regieleki: { - inherit: true, - abilities: { 0: "Galvanize" }, - }, - lycanrocmidnight: { - inherit: true, - abilities: { 0: "Technician" }, - }, - lycanroc: { - inherit: true, - abilities: { 0: "Drought" }, - }, - lycanrocdusk: { - inherit: true, - abilities: { 0: "Strong Jaw" }, - }, - dodrio: { - inherit: true, - abilities: { 0: "Speed Boost" }, - types: ["Flying", "Fighting"], - }, - whiscash: { - inherit: true, - abilities: { 0: "Regenerator" }, - baseStats: { hp: 110, atk: 78, def: 88, spa: 76, spd: 86, spe: 60 }, - }, - hippowdon: { - inherit: true, - abilities: { 0: "Earth Eater" }, - }, - cramorant: { - inherit: true, - baseStats: { hp: 90, atk: 85, def: 75, spa: 85, spd: 95, spe: 85 }, - }, - cramorantgulping: { - inherit: true, - baseStats: { hp: 90, atk: 85, def: 75, spa: 85, spd: 95, spe: 85 }, - abilities: { 0: "Storm Drain" }, - }, - cramorantgorging: { - inherit: true, - baseStats: { hp: 90, atk: 85, def: 75, spa: 85, spd: 95, spe: 85 }, - abilities: { 0: "Lightning Rod" }, - }, - grafaiai: { - inherit: true, - baseStats: { hp: 83, atk: 95, def: 65, spa: 80, spd: 72, spe: 110 }, - }, - tatsugiri: { - inherit: true, - abilities: { 0: "Regenerator" }, - baseStats: { hp: 78, atk: 50, def: 70, spa: 120, spd: 95, spe: 82 }, - }, - kyurem: { - inherit: true, - abilities: { 0: "Skill Link" }, - }, - roaringmoon: { - inherit: true, - abilities: { 0: "Shadow Shield" }, - }, - milotic: { - inherit: true, - abilities: { 0: "Aqua Veil" }, - types: ["Water", "Fairy"], - }, - gogoat: { - inherit: true, - types: ["Grass", "Rock"], - }, - clodsire: { - inherit: true, - abilities: { 0: "Still Water" }, - }, - masquerain: { - inherit: true, - abilities: { 0: "Intimidate" }, - }, - masquerainmega: { - num: -999, - name: "Masquerain-Mega", - baseSpecies: "Masquerain", - forme: "Mega", - types: ["Bug", "Dark"], - genderRatio: { M: 0.5, F: 0.5 }, - baseStats: { hp: 70, atk: 60, def: 82, spa: 140, spd: 82, spe: 120 }, - abilities: { 0: "Primordial Sea" }, - heightm: 0.8, - weightkg: 3.6, - color: "Blue", - eggGroups: ["Water 1", "Bug"], - requiredItem: "Masquerainite", - }, - kyuremblack: { - inherit: true, - abilities: { 0: "Teravolt" }, - types: ["Dragon", "Ice", "Electric"], - }, - ironthorns: { - inherit: true, - abilities: { 0: "Iron Barbs" }, - }, - dudunsparce: { - inherit: true, - abilities: { 0: "Earth Eater" }, - types: ["Normal", "Ground"], - }, - dudunsparcethreesegment: { - inherit: true, - abilities: { 0: "Earth Eater" }, - types: ["Normal", "Ground"], - }, - chienpao: { - inherit: true, - abilities: { 0: "Tablets of Ruin" }, - }, - pelipper: { - inherit: true, - }, - kleavor: { - inherit: true, - abilities: { 0: "King of the Hill" }, - baseStats: { hp: 120, atk: 135, def: 95, spa: 45, spd: 75, spe: 85 }, - }, - araquanid: { - inherit: true, - }, - avalugghisui: { - inherit: true, - abilities: { 0: "Multiscale" }, - baseStats: { hp: 95, atk: 127, def: 184, spa: 68, spd: 72, spe: 76 }, - }, - swalot: { - inherit: true, - abilities: { 0: "Omnivore" }, - }, - zapdosgalar: { - inherit: true, - types: ["Electric", "Fighting"], - }, - phione: { - inherit: true, - }, - sudowoodo: { - inherit: true, - abilities: { 0: "Pseudowoodo" }, - types: ["Grass"], - baseForme: "Grass", - otherFormes: ["Sudowoodo-Rock"], - formeOrder: ["Sudowoodo", "Sudowoodo-Rock"], - }, - sudowoodorock: { - num: 185, - name: "Sudowoodo-Rock", - baseSpecies: "Sudowoodo", - forme: "Rock", - types: ["Rock"], - baseStats: { hp: 70, atk: 100, def: 110, spa: 30, spd: 65, spe: 30 }, - abilities: { 0: "Pseudowoodo" }, - heightm: 1.7, - weightkg: 38, - color: "Brown", - eggGroups: ["Mineral"], - requiredAbility: "Pseudowoodo", - battleOnly: "Sudowoodo", - }, - dondozo: { - inherit: true, - }, - golurk: { - inherit: true, - }, - meowscarada: { - inherit: true, - }, - infernape: { - inherit: true, - abilities: { 0: "Berserk" }, - }, - salamence: { - inherit: true, - abilities: { 0: "Aerilate" }, - }, - salamencemega: { - num: 373, - name: "Salamence-Mega", - baseSpecies: "Salamence", - forme: "Mega", - types: ["Dragon", "Flying"], - baseStats: { hp: 95, atk: 145, def: 130, spa: 120, spd: 90, spe: 120 }, - abilities: { 0: "Blood-Soaked Crescent" }, - heightm: 1.8, - weightkg: 112.6, - color: "Blue", - eggGroups: ["Dragon"], - requiredItem: "Salamencite", - }, - urshifu: { - inherit: true, - abilities: { 0: "Sniper" }, - }, - urshifurapidstrike: { - inherit: true, - abilities: { 0: "Sniper" }, - }, - stonjourner: { - inherit: true, - }, - veluza: { - inherit: true, - types: ["Water", "Ghost"], - }, - ogerponhearthflame: { - inherit: true, - abilities: { 0: "Intimidate" }, - }, - dachsbun: { - inherit: true, - }, - koraidon: { - inherit: true, - }, - mew: { - inherit: true, - abilities: { 0: "Biogenesis" }, - }, - magneton: { - inherit: true, - }, - delibird: { - inherit: true, - abilities: { 0: "Hail Mary" }, - baseStats: { hp: 45, atk: 90, def: 45, spa: 65, spd: 45, spe: 136 }, - }, - articunogalar: { - inherit: true, - abilities: { 0: "Brain Freeze" }, - }, - vaporeon: { - inherit: true, - abilities: { 0: "Marvel Scale" }, - }, - jolteon: { - inherit: true, - abilities: { 0: "Quick Feet" }, - }, - flareon: { - inherit: true, - abilities: { 0: "Guts" }, - baseStats: { hp: 65, atk: 130, def: 65, spa: 60, spd: 110, spe: 95 }, - }, - garganacl: { - inherit: true, - }, - swanna: { - inherit: true, - abilities: { 0: "Serene Grace" }, - baseStats: { hp: 75, atk: 117, def: 93, spa: 117, spd: 93, spe: 128 }, - }, - typhlosion: { - inherit: true, - abilities: { 0: "Magic Guard" }, - }, - typhlosionmega: { - num: -998, - name: "Typhlosion-Mega", - baseSpecies: "Typhlosion", - forme: "Mega", - types: ["Fire", "Water"], - genderRatio: { M: 0.5, F: 0.5 }, - baseStats: { hp: 78, atk: 103, def: 98, spa: 140, spd: 115, spe: 100 }, - abilities: { 0: "Neutralizing Gas" }, - heightm: 1.7, - weightkg: 84.5, - color: "Blue", - eggGroups: ["Field"], - requiredItem: "Typhlosionite", - }, - terapagos: { - inherit: true, - }, - terapagosterastal: { - inherit: true, - abilities: { 0: "Tera Wheel" }, - }, - terapagosstellar: { - inherit: true, - types: ["Stellar"], - }, - flapple: { - inherit: true, - abilities: { 0: "Ripen" }, - types: ["Grass", "Ground"], - }, - genesect: { - inherit: true, - abilities: { 0: "Download" }, - }, - honchkrow: { - inherit: true, - abilities: { 0: "Supreme Overlord" }, - baseStats: { hp: 100, atk: 125, def: 52, spa: 125, spd: 52, spe: 71 }, - }, - primeape: { - inherit: true, - abilities: { 0: "Battle Rage" }, - }, - rillaboom: { - inherit: true, - abilities: { 0: "Terrain Shift" }, - }, - mandibuzz: { - inherit: true, - abilities: { 0: "Weak Armor" }, - types: ["Dark", "Ground"], - }, - feraligatr: { - inherit: true, - }, - feraligatrmega: { - num: -988, - name: "Feraligatr-Mega", - baseSpecies: "Feraligatr", - forme: "Mega", - types: ["Dragon"], - genderRatio: { M: 0.875, F: 0.125 }, - baseStats: { hp: 85, atk: 145, def: 120, spa: 99, spd: 103, spe: 78 }, - abilities: { 0: "Dragon's Jaw" }, - heightm: 2.3, - weightkg: 108.8, - color: "Blue", - eggGroups: ["Monster", "Water 1"], - requiredItem: "Feraligite", - gen: 9, - }, - salazzle: { - inherit: true, - abilities: { 0: "Corrosive Soul" }, - }, - kyogre: { - inherit: true, - abilities: { 0: "Oceanic Blessing" }, - }, - azelf: { - inherit: true, - abilities: { 0: "Auto Spin" }, - types: ["Psychic", "Normal"], - }, - decidueye: { - inherit: true, - abilities: { 0: "Overgrow", 1: "Sniper" }, - }, - ogerponcornerstone: { - inherit: true, - abilities: { 0: "Solid Rock" }, - }, - glimmora: { - inherit: true, - abilities: { 0: "Corrosion" }, - }, - wobbuffet: { - inherit: true, - abilities: { 0: "Jello Body" }, - }, - raticate: { - inherit: true, - abilities: { 0: "Hustle" }, - baseStats: { hp: 90, atk: 81, def: 60, spa: 50, spd: 70, spe: 97 }, - }, - raticatemega: { - num: -977, - name: "Raticate-Mega", - baseSpecies: "Raticate", - forme: "Mega", - types: ["Normal", "Ghost"], - genderRatio: { M: 0.5, F: 0.5 }, - baseStats: { hp: 90, atk: 105, def: 60, spa: 50, spd: 70, spe: 173 }, - abilities: { 0: "Nibble Nibble" }, - heightm: 0.7, - weightkg: 5, - color: "Black", - eggGroups: ["Field"], - requiredItem: "Raticite", - }, -}; +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { + volcarona: { + inherit: true, + abilities: { 0: "Fluffy" }, + }, + golemalola: { + inherit: true, + }, + lurantis: { + inherit: true, + baseStats: { hp: 85, atk: 105, def: 90, spa: 95, spd: 90, spe: 75 }, + }, + ironcrown: { + inherit: true, + abilities: { 0: "Queenly Majesty", H: "Battle Armor" }, + }, + mamoswine: { + inherit: true, + }, + ceruledge: { + inherit: true, + }, + carbink: { + inherit: true, + abilities: { 0: "Magic Bounce" }, + }, + moltres: { + inherit: true, + abilities: { 0: "Magic Guard" }, + }, + kommoo: { + inherit: true, + baseStats: { hp: 75, atk: 100, def: 125, spa: 110, spd: 105, spe: 85 }, + abilities: { 0: "Punk Rock" }, + }, + illumise: { + inherit: true, + abilities: { 0: "Call Volbeat" }, + }, + volbeat: { + inherit: true, + abilities: { 0: "Call Illumise" }, + }, + abomasnow: { + inherit: true, + }, + abomasnowmega: { + inherit: true, + baseStats: { hp: 90, atk: 132, def: 105, spa: 92, spd: 105, spe: 70 }, + abilities: { 0: "Slush Rush" }, + }, + dugtrio: { + inherit: true, + }, + altaria: { + inherit: true, + abilities: { 0: "Fluffy" }, + }, + altariamega: { + inherit: true, + }, + tyranitar: { + inherit: true, + abilities: { 0: "Sand Stream", H: "Sharpness" }, + }, + tyranitarmega: { + inherit: true, + baseStats: { hp: 100, atk: 114, def: 150, spa: 155, spd: 110, spe: 71 }, + types: ["Rock", "Dragon"], + }, + mimikyu: { + inherit: true, + baseStats: { hp: 65, atk: 110, def: 80, spa: 50, spd: 105, spe: 96 }, + }, + mimikyubusted: { + inherit: true, + abilities: { 0: "Perish Body" }, + baseStats: { hp: 65, atk: 90, def: 80, spa: 50, spd: 105, spe: 116 }, + }, + mesprit: { + inherit: true, + abilities: { 0: "Liquid Voice" }, + types: ["Psychic", "Water"], + }, + electrode: { + inherit: true, + abilities: { 0: "Short Fuse" }, + types: ["Electric", "Normal"], + }, + taurospaldeacombat: { + inherit: true, + abilities: { 0: "Adaptability" }, + }, + chiyu: { + inherit: true, + abilities: { 0: "Water Absorb" }, + baseStats: { hp: 55, atk: 135, def: 80, spa: 80, spd: 120, spe: 100 }, + }, + wochien: { + inherit: true, + abilities: { 0: "Liquid Ooze" }, + types: ["Grass", "Water"], + }, + staraptor: { + inherit: true, + types: ["Flying"], + }, + archaludon: { + inherit: true, + abilities: { 0: "Hydroelectric Dam", 1: "Stamina" }, + }, + malamar: { + inherit: true, + abilities: { 0: "Flip Flop" }, + baseStats: { hp: 86, atk: 92, def: 88, spa: 88, spd: 75, spe: 73 }, + }, + empoleon: { + inherit: true, + abilities: { 0: "Sharpness" }, + types: ["Water", "Steel", "Flying"], + }, + glastrier: { + inherit: true, + abilities: { 0: "Frozen Armor" }, + }, + calyrexice: { + inherit: true, + baseStats: { hp: 100, atk: 165, def: 130, spa: 85, spd: 110, spe: 90 }, + }, + regieleki: { + inherit: true, + abilities: { 0: "Galvanize" }, + }, + lycanrocmidnight: { + inherit: true, + abilities: { 0: "Technician" }, + }, + lycanroc: { + inherit: true, + abilities: { 0: "Drought" }, + }, + lycanrocdusk: { + inherit: true, + abilities: { 0: "Strong Jaw" }, + }, + dodrio: { + inherit: true, + abilities: { 0: "Speed Boost" }, + types: ["Flying", "Fighting"], + }, + whiscash: { + inherit: true, + abilities: { 0: "Regenerator" }, + baseStats: { hp: 110, atk: 78, def: 88, spa: 76, spd: 86, spe: 60 }, + }, + hippowdon: { + inherit: true, + abilities: { 0: "Earth Eater" }, + }, + cramorant: { + inherit: true, + baseStats: { hp: 90, atk: 85, def: 75, spa: 85, spd: 95, spe: 85 }, + }, + cramorantgulping: { + inherit: true, + baseStats: { hp: 90, atk: 85, def: 75, spa: 85, spd: 95, spe: 85 }, + abilities: { 0: "Storm Drain" }, + }, + cramorantgorging: { + inherit: true, + baseStats: { hp: 90, atk: 85, def: 75, spa: 85, spd: 95, spe: 85 }, + abilities: { 0: "Lightning Rod" }, + }, + grafaiai: { + inherit: true, + baseStats: { hp: 83, atk: 95, def: 65, spa: 80, spd: 72, spe: 110 }, + }, + tatsugiri: { + inherit: true, + abilities: { 0: "Regenerator" }, + baseStats: { hp: 78, atk: 50, def: 70, spa: 120, spd: 95, spe: 82 }, + }, + kyurem: { + inherit: true, + abilities: { 0: "Skill Link" }, + }, + roaringmoon: { + inherit: true, + abilities: { 0: "Shadow Shield" }, + }, + milotic: { + inherit: true, + abilities: { 0: "Aqua Veil" }, + types: ["Water", "Fairy"], + }, + gogoat: { + inherit: true, + types: ["Grass", "Rock"], + }, + clodsire: { + inherit: true, + abilities: { 0: "Still Water" }, + }, + masquerain: { + inherit: true, + abilities: { 0: "Intimidate" }, + }, + masquerainmega: { + num: -999, + name: "Masquerain-Mega", + baseSpecies: "Masquerain", + forme: "Mega", + types: ["Bug", "Dark"], + genderRatio: { M: 0.5, F: 0.5 }, + baseStats: { hp: 70, atk: 60, def: 82, spa: 140, spd: 82, spe: 120 }, + abilities: { 0: "Primordial Sea" }, + heightm: 0.8, + weightkg: 3.6, + color: "Blue", + eggGroups: ["Water 1", "Bug"], + requiredItem: "Masquerainite", + }, + kyuremblack: { + inherit: true, + abilities: { 0: "Teravolt" }, + types: ["Dragon", "Ice", "Electric"], + }, + ironthorns: { + inherit: true, + abilities: { 0: "Iron Barbs" }, + }, + dudunsparce: { + inherit: true, + abilities: { 0: "Earth Eater" }, + types: ["Normal", "Ground"], + }, + dudunsparcethreesegment: { + inherit: true, + abilities: { 0: "Earth Eater" }, + types: ["Normal", "Ground"], + }, + chienpao: { + inherit: true, + abilities: { 0: "Tablets of Ruin" }, + }, + pelipper: { + inherit: true, + }, + kleavor: { + inherit: true, + abilities: { 0: "King of the Hill" }, + baseStats: { hp: 120, atk: 135, def: 95, spa: 45, spd: 75, spe: 85 }, + }, + araquanid: { + inherit: true, + }, + avalugghisui: { + inherit: true, + abilities: { 0: "Multiscale" }, + baseStats: { hp: 95, atk: 127, def: 184, spa: 68, spd: 72, spe: 76 }, + }, + swalot: { + inherit: true, + abilities: { 0: "Omnivore" }, + }, + zapdosgalar: { + inherit: true, + types: ["Electric", "Fighting"], + }, + phione: { + inherit: true, + }, + sudowoodo: { + inherit: true, + abilities: { 0: "Pseudowoodo" }, + types: ["Grass"], + baseForme: "Grass", + otherFormes: ["Sudowoodo-Rock"], + formeOrder: ["Sudowoodo", "Sudowoodo-Rock"], + }, + sudowoodorock: { + num: 185, + name: "Sudowoodo-Rock", + baseSpecies: "Sudowoodo", + forme: "Rock", + types: ["Rock"], + baseStats: { hp: 70, atk: 100, def: 110, spa: 30, spd: 65, spe: 30 }, + abilities: { 0: "Pseudowoodo" }, + heightm: 1.7, + weightkg: 38, + color: "Brown", + eggGroups: ["Mineral"], + requiredAbility: "Pseudowoodo", + battleOnly: "Sudowoodo", + }, + dondozo: { + inherit: true, + }, + golurk: { + inherit: true, + }, + meowscarada: { + inherit: true, + }, + infernape: { + inherit: true, + abilities: { 0: "Berserk" }, + }, + salamence: { + inherit: true, + abilities: { 0: "Aerilate" }, + }, + salamencemega: { + num: 373, + name: "Salamence-Mega", + baseSpecies: "Salamence", + forme: "Mega", + types: ["Dragon", "Flying"], + baseStats: { hp: 95, atk: 145, def: 130, spa: 120, spd: 90, spe: 120 }, + abilities: { 0: "Blood-Soaked Crescent" }, + heightm: 1.8, + weightkg: 112.6, + color: "Blue", + eggGroups: ["Dragon"], + requiredItem: "Salamencite", + }, + urshifu: { + inherit: true, + abilities: { 0: "Sniper" }, + }, + urshifurapidstrike: { + inherit: true, + abilities: { 0: "Sniper" }, + }, + stonjourner: { + inherit: true, + }, + veluza: { + inherit: true, + types: ["Water", "Ghost"], + }, + ogerponhearthflame: { + inherit: true, + abilities: { 0: "Intimidate" }, + }, + dachsbun: { + inherit: true, + }, + koraidon: { + inherit: true, + }, + mew: { + inherit: true, + abilities: { 0: "Biogenesis" }, + }, + magneton: { + inherit: true, + }, + delibird: { + inherit: true, + abilities: { 0: "Hail Mary" }, + baseStats: { hp: 45, atk: 90, def: 45, spa: 65, spd: 45, spe: 136 }, + }, + articunogalar: { + inherit: true, + abilities: { 0: "Brain Freeze" }, + }, + vaporeon: { + inherit: true, + abilities: { 0: "Marvel Scale" }, + }, + jolteon: { + inherit: true, + abilities: { 0: "Quick Feet" }, + }, + flareon: { + inherit: true, + abilities: { 0: "Guts" }, + baseStats: { hp: 65, atk: 130, def: 65, spa: 60, spd: 110, spe: 95 }, + }, + garganacl: { + inherit: true, + }, + swanna: { + inherit: true, + abilities: { 0: "Serene Grace" }, + baseStats: { hp: 75, atk: 117, def: 93, spa: 117, spd: 93, spe: 128 }, + }, + typhlosion: { + inherit: true, + abilities: { 0: "Magic Guard" }, + }, + typhlosionmega: { + num: -998, + name: "Typhlosion-Mega", + baseSpecies: "Typhlosion", + forme: "Mega", + types: ["Fire", "Water"], + genderRatio: { M: 0.5, F: 0.5 }, + baseStats: { hp: 78, atk: 103, def: 98, spa: 140, spd: 115, spe: 100 }, + abilities: { 0: "Neutralizing Gas" }, + heightm: 1.7, + weightkg: 84.5, + color: "Blue", + eggGroups: ["Field"], + requiredItem: "Typhlosionite", + }, + terapagos: { + inherit: true, + }, + terapagosterastal: { + inherit: true, + abilities: { 0: "Tera Wheel" }, + }, + terapagosstellar: { + inherit: true, + types: ["Stellar"], + }, + flapple: { + inherit: true, + abilities: { 0: "Ripen" }, + types: ["Grass", "Ground"], + }, + genesect: { + inherit: true, + abilities: { 0: "Download" }, + }, + honchkrow: { + inherit: true, + abilities: { 0: "Supreme Overlord" }, + baseStats: { hp: 100, atk: 125, def: 52, spa: 125, spd: 52, spe: 71 }, + }, + primeape: { + inherit: true, + abilities: { 0: "Battle Rage" }, + }, + rillaboom: { + inherit: true, + abilities: { 0: "Terrain Shift" }, + }, + mandibuzz: { + inherit: true, + abilities: { 0: "Weak Armor" }, + types: ["Dark", "Ground"], + }, + feraligatr: { + inherit: true, + }, + feraligatrmega: { + num: -988, + name: "Feraligatr-Mega", + baseSpecies: "Feraligatr", + forme: "Mega", + types: ["Dragon"], + genderRatio: { M: 0.875, F: 0.125 }, + baseStats: { hp: 85, atk: 145, def: 120, spa: 99, spd: 103, spe: 78 }, + abilities: { 0: "Dragon's Jaw" }, + heightm: 2.3, + weightkg: 108.8, + color: "Blue", + eggGroups: ["Monster", "Water 1"], + requiredItem: "Feraligite", + gen: 9, + }, + salazzle: { + inherit: true, + abilities: { 0: "Corrosive Soul" }, + }, + kyogre: { + inherit: true, + abilities: { 0: "Oceanic Blessing" }, + }, + azelf: { + inherit: true, + abilities: { 0: "Auto Spin" }, + types: ["Psychic", "Normal"], + }, + decidueye: { + inherit: true, + abilities: { 0: "Overgrow", 1: "Sniper" }, + }, + ogerponcornerstone: { + inherit: true, + abilities: { 0: "Solid Rock" }, + }, + glimmora: { + inherit: true, + abilities: { 0: "Corrosion" }, + }, + wobbuffet: { + inherit: true, + abilities: { 0: "Jello Body" }, + }, + raticate: { + inherit: true, + abilities: { 0: "Hustle" }, + baseStats: { hp: 90, atk: 81, def: 60, spa: 50, spd: 70, spe: 97 }, + }, + raticatemega: { + num: -977, + name: "Raticate-Mega", + baseSpecies: "Raticate", + forme: "Mega", + types: ["Normal", "Ghost"], + genderRatio: { M: 0.5, F: 0.5 }, + baseStats: { hp: 90, atk: 105, def: 60, spa: 50, spd: 70, spe: 173 }, + abilities: { 0: "Nibble Nibble" }, + heightm: 0.7, + weightkg: 5, + color: "Black", + eggGroups: ["Field"], + requiredItem: "Raticite", + }, +}; diff --git a/data/mods/chatbats/scripts.ts b/data/mods/chatbats/scripts.ts index 207d563386..b289c62474 100644 --- a/data/mods/chatbats/scripts.ts +++ b/data/mods/chatbats/scripts.ts @@ -1,304 +1,311 @@ -export const Scripts: ModdedBattleScriptsData = { - gen: 9, - - init() { - this.modData('Learnsets', 'lurantis').learnset.icehammer = ['9L1']; - - this.modData('Learnsets', 'ironcrown').learnset.kingsshield = ['9L1']; - this.modData('Learnsets', 'ironcrown').learnset.bodypress = ['9L1']; - - this.modData('Learnsets', 'carbink').learnset.moonlight = ['9L1']; - this.modData('Learnsets', 'carbink').learnset.voltswitch = ['9L1']; - this.modData('Learnsets', 'carbink').learnset.spikes = ['9L1']; - - this.modData('Learnsets', 'moltres').learnset.woodhammer = ['9L1']; - this.modData('Learnsets', 'moltres').learnset.wavecrash = ['9L1']; - this.modData('Learnsets', 'moltres').learnset.defog = ['9L1']; - - this.modData('Learnsets', 'kommoo').learnset.aurasphere = ['9L1']; - - this.modData('Learnsets', 'illumise').learnset.quiverdance = ['9L1']; - this.modData('Learnsets', 'illumise').learnset.thunderbolt = ['9L1']; - this.modData('Learnsets', 'illumise').learnset.icebeam = ['9L1']; - - this.modData('Learnsets', 'volbeat').learnset.victorydance = ['9L1']; - this.modData('Learnsets', 'volbeat').learnset.mightycleave = ['9L1']; - this.modData('Learnsets', 'volbeat').learnset.earthquake = ['9L1']; - - this.modData('Learnsets', 'abomasnow').learnset.glaciallance = ['9L1']; - this.modData('Learnsets', 'abomasnow').learnset.appleacid = ['9L1']; - this.modData('Learnsets', 'abomasnow').learnset.partingshot = ['9L1']; - - this.modData('Learnsets', 'dugtrio').learnset.mightycleave = ['9L1']; - this.modData('Learnsets', 'dugtrio').learnset.saltcure = ['9L1']; - this.modData('Learnsets', 'dugtrio').learnset.acrobatics = ['9L1']; - - this.modData('Learnsets', 'altaria').learnset.beakblast = ['9L1']; - this.modData('Learnsets', 'altaria').learnset.return = ['9L1']; - this.modData('Learnsets', 'altaria').learnset.explosion = ['9L1']; - - this.modData('Learnsets', 'tyranitar').learnset.stoneaxe = ['9L1']; - this.modData('Learnsets', 'tyranitar').learnset.ceaselessedge = ['9L1']; - this.modData('Learnsets', 'tyranitar').learnset.kowtowcleave = ['9L1']; - this.modData('Learnsets', 'tyranitar').learnset.pursuit = ['9L1']; - this.modData('Learnsets', 'tyranitar').learnset.switcheroo = ['9L1']; - this.modData('Learnsets', 'tyranitar').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'tyranitar').learnset.dracometeor = ['9L1']; - this.modData('Learnsets', 'tyranitar').learnset.mysticalpower = ['9L1']; - this.modData('Learnsets', 'tyranitar').learnset.sandsearstorm = ['9L1']; - - this.modData('Learnsets', 'mimikyu').learnset.spiritshackle = ['9L1']; - this.modData('Learnsets', 'mimikyu').learnset.uturn = ['9L1']; - this.modData('Learnsets', 'mimikyu').learnset.obstruct = ['9L1']; - - this.modData('Learnsets', 'mesprit').learnset.agility = ['9L1']; - this.modData('Learnsets', 'mesprit').learnset.storedpower = ['9L1']; - this.modData('Learnsets', 'mesprit').learnset.torchsong = ['9L1']; - this.modData('Learnsets', 'mesprit').learnset.cosmicpower = ['9L1']; - this.modData('Learnsets', 'mesprit').learnset.aquaring = ['9L1']; - this.modData('Learnsets', 'mesprit').learnset.freezedry = ['9L1']; - - this.modData('Learnsets', 'electrode').learnset.encore = ['9L1']; - this.modData('Learnsets', 'electrode').learnset.rapidspin = ['9L1']; - - this.modData('Learnsets', 'taurospaldeacombat').learnset.extremespeed = ['9L1']; - this.modData('Learnsets', 'taurospaldeacombat').learnset.uturn = ['9L1']; - this.modData('Learnsets', 'taurospaldeacombat').learnset.knockoff = ['9L1']; - - this.modData('Learnsets', 'chiyu').learnset.splash = ['9L1']; - this.modData('Learnsets', 'chiyu').learnset.tripledive = ['9L1']; - this.modData('Learnsets', 'chiyu').learnset.pyroball = ['9L1']; - this.modData('Learnsets', 'chiyu').learnset.knockoff = ['9L1']; - this.modData('Learnsets', 'chiyu').learnset.suckerpunch = ['9L1']; - - this.modData('Learnsets', 'wochien').learnset.partingshot = ['9L1']; - this.modData('Learnsets', 'wochien').learnset.strengthsap = ['9L1']; - this.modData('Learnsets', 'wochien').learnset.bouncingbubble = ['9L1']; - - this.modData('Learnsets', 'staraptor').learnset.jumpkick = ['9L1']; - this.modData('Learnsets', 'staraptor').learnset.flareblitz = ['9L1']; - this.modData('Learnsets', 'staraptor').learnset.wavecrash = ['9L1']; - this.modData('Learnsets', 'staraptor').learnset.headsmash = ['9L1']; - - this.modData('Learnsets', 'archaludon').learnset.scald = ['9L1']; - this.modData('Learnsets', 'archaludon').learnset.hydropump = ['9L1']; - - this.modData('Learnsets', 'malamar').learnset.willowisp = ['9L1']; - this.modData('Learnsets', 'malamar').learnset.recover = ['9L1']; - this.modData('Learnsets', 'malamar').learnset.eeriespell = ['9L1']; - this.modData('Learnsets', 'malamar').learnset.sweetkiss = ['9L1']; - this.modData('Learnsets', 'malamar').learnset.spiritbreak = ['9L1']; - - this.modData('Learnsets', 'empoleon').learnset.nastyplot = ['9L1']; - this.modData('Learnsets', 'empoleon').learnset.watershuriken = ['9L1']; - this.modData('Learnsets', 'empoleon').learnset.tachyoncutter = ['9L1']; - this.modData('Learnsets', 'empoleon').learnset.secretsword = ['9L1']; - - this.modData('Learnsets', 'regieleki').learnset.blazingtorque = ['9L1']; - this.modData('Learnsets', 'regieleki').learnset.soak = ['9L1']; - - this.modData('Learnsets', 'lycanrocmidnight').learnset.accelerock = ['9L1']; - this.modData('Learnsets', 'lycanrocmidnight').learnset.bonerush = ['9L1']; - this.modData('Learnsets', 'lycanrocmidnight').learnset.stormthrow = ['9L1']; - - this.modData('Learnsets', 'lycanroc').learnset.firelash = ['9L1']; - this.modData('Learnsets', 'lycanroc').learnset.uturn = ['9L1']; - this.modData('Learnsets', 'lycanroc').learnset.spikes = ['9L1']; - - this.modData('Learnsets', 'lycanrocdusk').learnset.mountainmaw = ['9L1']; - this.modData('Learnsets', 'lycanrocdusk').learnset.icefang = ['9L1']; - - this.modData('Learnsets', 'dodrio').learnset.triplearrows = ['9L1']; - this.modData('Learnsets', 'dodrio').learnset.obstruct = ['9L1']; - - this.modData('Learnsets', 'whiscash').learnset.toxic = ['9L1']; - this.modData('Learnsets', 'whiscash').learnset.flipturn = ['9L1']; - this.modData('Learnsets', 'whiscash').learnset.scald = ['9L1']; - - this.modData('Learnsets', 'hippowdon').learnset.saltcure = ['9L1']; - - this.modData('Learnsets', 'cramorant').learnset.beakblast = ['9L1']; - - this.modData('Learnsets', 'grafaiai').learnset.bulkup = ['9L1']; - this.modData('Learnsets', 'grafaiai').learnset.scavenge = ['9L1']; - this.modData('Learnsets', 'grafaiai').learnset.drainpunch = ['9L1']; - - this.modData('Learnsets', 'kyurem').learnset.earthquake = ['9L1']; - - this.modData('Learnsets', 'roaringmoon').learnset.firelash = ['9L1']; - this.modData('Learnsets', 'roaringmoon').learnset.glaiverush = ['9L1']; - - this.modData('Learnsets', 'milotic').learnset.bouncybubble = ['9L1']; - this.modData('Learnsets', 'milotic').learnset.moonblast = ['9L1']; - - this.modData('Learnsets', 'gogoat').learnset.headsmash = ['9L1']; - - this.modData('Learnsets', 'clodsire').learnset.barbbarrage = ['9L1']; - - this.modData('Learnsets', 'masquerain').learnset.roost = ['9L1']; - this.modData('Learnsets', 'masquerain').learnset.darkpulse = ['9L1']; - - this.modData('Learnsets', 'kyuremblack').learnset.icehammer = ['9L1']; - this.modData('Learnsets', 'kyuremblack').learnset.dragonhammer = ['9L1']; - this.modData('Learnsets', 'kyuremblack').learnset.roost = ['9L1']; - this.modData('Learnsets', 'kyuremblack').learnset.earthquake = ['9L1']; - - this.modData('Learnsets', 'ironthorns').learnset.ironstrike = ['9L1']; - this.modData('Learnsets', 'ironthorns').learnset.knockoff = ['9L1']; - - this.modData('Learnsets', 'chienpao').learnset.bulkup = ['9L1']; - this.modData('Learnsets', 'chienpao').learnset.iciclestorm = ['9L1']; - - this.modData('Learnsets', 'pelipper').learnset.bleakwindstorm = ['9L1']; - this.modData('Learnsets', 'pelipper').learnset.sandsearstorm = ['9L1']; - this.modData('Learnsets', 'pelipper').learnset.wildboltstorm = ['9L1']; - this.modData('Learnsets', 'pelipper').learnset.springtidestorm = ['9L1']; - - this.modData('Learnsets', 'araquanid').learnset.surgingstrikes = ['9L1']; - this.modData('Learnsets', 'araquanid').learnset.flipturn = ['9L1']; - this.modData('Learnsets', 'araquanid').learnset.silktrap = ['9L1']; - this.modData('Learnsets', 'araquanid').learnset.firstimpression = ['9L1']; - - this.modData('Learnsets', 'avalugghisui').learnset.mountainmaw = ['9L1']; - - this.modData('Learnsets', 'swalot').learnset.earthpower = ['9L1']; - - this.modData('Learnsets', 'zapdosgalar').learnset.wildcharge = ['9L1']; - - this.modData('Learnsets', 'phione').learnset.workup = ['9L1']; - this.modData('Learnsets', 'phione').learnset.tidalsurge = ['9L1']; - this.modData('Learnsets', 'phione').learnset.geyser = ['9L1']; - - this.modData('Learnsets', 'sudowoodo').learnset.bonsaibounce = ['9L1']; - this.modData('Learnsets', 'sudowoodo').learnset.synthesis = ['9L1']; - - this.modData('Learnsets', 'dondozo').learnset.hornleech = ['9L1']; - this.modData('Learnsets', 'dondozo').learnset.fishiousrend = ['9L1']; - this.modData('Learnsets', 'dondozo').learnset.recover = ['9L1']; - this.modData('Learnsets', 'dondozo').learnset.flipturn = ['9L1']; - - this.modData('Learnsets', 'golurk').learnset.shatteredseal = ['9L1']; - this.modData('Learnsets', 'golurk').learnset.trickroom = ['9L1']; - this.modData('Learnsets', 'golurk').learnset.headlongrush = ['9L1']; - - this.modData('Learnsets', 'meowscarada').learnset.encore = ['9L1']; - this.modData('Learnsets', 'meowscarada').learnset.spectralthief = ['9L1']; - - this.modData('Learnsets', 'infernape').learnset.alloutassault = ['9L1']; - this.modData('Learnsets', 'infernape').learnset.mindblown = ['9L1']; - this.modData('Learnsets', 'infernape').learnset.bitterblade = ['9L1']; - - this.modData('Learnsets', 'salamence').learnset.uturn = ['9L1']; - this.modData('Learnsets', 'salamence').learnset.dragonascent = ['9L1']; - this.modData('Learnsets', 'salamence').learnset.bloodmoon = ['9L1']; - - this.modData('Learnsets', 'urshifu').learnset.agility = ['9L1']; - this.modData('Learnsets', 'urshifu').learnset.aquajet = ['9L1']; - - this.modData('Learnsets', 'urshifurapidstrike').learnset.agility = ['9L1']; - this.modData('Learnsets', 'urshifurapidstrike').learnset.suckerpunch = ['9L1']; - - this.modData('Learnsets', 'stonjourner').learnset.rockwrecker = ['9L1']; - this.modData('Learnsets', 'stonjourner').learnset.meteorassault = ['9L1']; - this.modData('Learnsets', 'stonjourner').learnset.skyattack = ['9L1']; - this.modData('Learnsets', 'stonjourner').learnset.solarblade = ['9L1']; - - this.modData('Learnsets', 'veluza').learnset.ragefist = ['9L1']; - - this.modData('Learnsets', 'ogerpon').learnset.leafblade = ['9L1']; - this.modData('Learnsets', 'ogerpon').learnset.crabhammer = ['9L1']; - this.modData('Learnsets', 'ogerpon').learnset.stoneedge = ['9L1']; - - this.modData('Learnsets', 'dachsbun').learnset.nuzzle = ['9L1']; - this.modData('Learnsets', 'dachsbun').learnset.spiritbreak = ['9L1']; - this.modData('Learnsets', 'dachsbun').learnset.morningsun = ['9L1']; - - this.modData('Learnsets', 'magneton').learnset.magnetbomb = ['9L1']; - - this.modData('Learnsets', 'delibird').learnset.iciclestorm = ['9L1']; - - this.modData('Learnsets', 'hitmontop').learnset.bulletseed = ['9L1']; - - this.modData('Learnsets', 'articunogalar').learnset.aeroblast = ['9L1']; - this.modData('Learnsets', 'articunogalar').learnset.oblivionwing = ['9L1']; - this.modData('Learnsets', 'articunogalar').learnset.aurasphere = ['9L1']; - - this.modData('Learnsets', 'vaporeon').learnset.voltswitch = ['9L1']; - this.modData('Learnsets', 'vaporeon').learnset.burnout = ['9L1']; - - this.modData('Learnsets', 'garganacl').learnset.thunderwave = ['9L1']; - this.modData('Learnsets', 'garganacl').learnset.saltcurse = ['9L1']; - this.modData('Learnsets', 'garganacl').learnset.purify = ['9L1']; - - this.modData('Learnsets', 'swanna').learnset.bleakwindstorm = ['9L1']; - this.modData('Learnsets', 'swanna').learnset.steameruption = ['9L1']; - this.modData('Learnsets', 'swanna').learnset.flyby = ['9L1']; - - this.modData('Learnsets', 'typhlosion').learnset.heatsink = ['9L1']; - this.modData('Learnsets', 'typhlosion').learnset.steameruption = ['9L1']; - this.modData('Learnsets', 'typhlosion').learnset.matchagotcha = ['9L1']; - this.modData('Learnsets', 'typhlosion').learnset.calmmind = ['9L1']; - this.modData('Learnsets', 'typhlosion').learnset.morningsun = ['9L1']; - - this.modData('Learnsets', 'terapagos').learnset.nastyplot = ['9L1']; - - this.modData('Learnsets', 'tatsugiri').learnset.switcheroo = ['9L1']; - this.modData('Learnsets', 'tatsugiri').learnset.sashimishuffle = ['9L1']; - this.modData('Learnsets', 'tatsugiri').learnset.twister = ['9L1']; - this.modData('Learnsets', 'tatsugiri').learnset.waterspout = ['9L1']; - - this.modData('Learnsets', 'flapple').learnset.earthquake = ['9L1']; - this.modData('Learnsets', 'flapple').learnset.grabapple = ['9L1']; - this.modData('Learnsets', 'flapple').learnset.flareblitz = ['9L1']; - - this.modData('Learnsets', 'genesect').learnset.earthquake = ['9L1']; - this.modData('Learnsets', 'genesect').learnset.sunsteelstrike = ['9L1']; - this.modData('Learnsets', 'genesect').learnset.behemothblade = ['9L1']; - this.modData('Learnsets', 'genesect').learnset.makeitrain = ['9L1']; - this.modData('Learnsets', 'genesect').learnset.tachyoncutter = ['9L1']; - - this.modData('Learnsets', 'honchkrow').learnset.crowverload = ['9L1']; - this.modData('Learnsets', 'honchkrow').learnset.oblivionwing = ['9L1']; - this.modData('Learnsets', 'honchkrow').learnset.closecombat = ['9L1']; - - this.modData('Learnsets', 'primeape').learnset.knockoff = ['9L1']; - this.modData('Learnsets', 'primeape').learnset.ironhead = ['9L1']; - - this.modData('Learnsets', 'rillaboom').learnset.naturesfury = ['9L1']; - this.modData('Learnsets', 'rillaboom').learnset.landswrath = ['9L1']; - - this.modData('Learnsets', 'mandibuzz').learnset.fling = ['9L1']; - this.modData('Learnsets', 'mandibuzz').learnset.scavenge = ['9L1']; - this.modData('Learnsets', 'mandibuzz').learnset.bonemerang = ['9L1']; - - this.modData('Learnsets', 'feraligatr').learnset.firefang = ['9L1']; - this.modData('Learnsets', 'feraligatr').learnset.thunderfang = ['9L1']; - this.modData('Learnsets', 'feraligatr').learnset.poisonfang = ['9L1']; - - this.modData('Learnsets', 'salazzle').learnset.magmastorm = ['9L1']; - this.modData('Learnsets', 'salazzle').learnset.malignantchain = ['9L1']; - this.modData('Learnsets', 'salazzle').learnset.psychicnoise = ['9L1']; - this.modData('Learnsets', 'salazzle').learnset.banefulbunker = ['9L1']; - - this.modData('Learnsets', 'kyogre').learnset.hurricane = ['9L1']; - this.modData('Learnsets', 'kyogre').learnset.tidalsurge = ['9L1']; - - this.modData('Learnsets', 'azelf').learnset.rapidspin = ['9L1']; - this.modData('Learnsets', 'azelf').learnset.lootbox = ['9L1']; - this.modData('Learnsets', 'azelf').learnset.acupressure = ['9L1']; - - this.modData('Learnsets', 'decidueye').learnset.sinisterarrows = ['9L1']; - - this.modData('Learnsets', 'ogerpon').learnset.sappyseed = ['9L1']; - this.modData('Learnsets', 'ogerpon').learnset.thousandwaves = ['9L1']; - - this.modData('Learnsets', 'glimmora').learnset.icebeam = ['9L1']; - this.modData('Learnsets', 'glimmora').learnset.malignantchain = ['9L1']; - - this.modData('Learnsets', 'wobbuffet').learnset.nightshade = ['9L1']; - this.modData('Learnsets', 'wobbuffet').learnset.guillotine = ['9L1']; - this.modData('Learnsets', 'wobbuffet').learnset.shedtail = ['9L1']; - - this.modData('Learnsets', 'raticate').learnset.lastbreakfast = ['9L1']; - }, -}; +export const Scripts: ModdedBattleScriptsData = { + gen: 9, + + init() { + this.modData('Learnsets', 'lurantis').learnset.icehammer = ['9L1']; + + this.modData('Learnsets', 'ironcrown').learnset.kingsshield = ['9L1']; + this.modData('Learnsets', 'ironcrown').learnset.bodypress = ['9L1']; + + this.modData('Learnsets', 'carbink').learnset.moonlight = ['9L1']; + this.modData('Learnsets', 'carbink').learnset.voltswitch = ['9L1']; + this.modData('Learnsets', 'carbink').learnset.spikes = ['9L1']; + + this.modData('Learnsets', 'moltres').learnset.woodhammer = ['9L1']; + this.modData('Learnsets', 'moltres').learnset.wavecrash = ['9L1']; + this.modData('Learnsets', 'moltres').learnset.defog = ['9L1']; + + this.modData('Learnsets', 'kommoo').learnset.aurasphere = ['9L1']; + + this.modData('Learnsets', 'illumise').learnset.quiverdance = ['9L1']; + this.modData('Learnsets', 'illumise').learnset.thunderbolt = ['9L1']; + this.modData('Learnsets', 'illumise').learnset.icebeam = ['9L1']; + + this.modData('Learnsets', 'volbeat').learnset.victorydance = ['9L1']; + this.modData('Learnsets', 'volbeat').learnset.mightycleave = ['9L1']; + this.modData('Learnsets', 'volbeat').learnset.earthquake = ['9L1']; + + this.modData('Learnsets', 'abomasnow').learnset.glaciallance = ['9L1']; + this.modData('Learnsets', 'abomasnow').learnset.appleacid = ['9L1']; + this.modData('Learnsets', 'abomasnow').learnset.partingshot = ['9L1']; + + this.modData('Learnsets', 'dugtrio').learnset.mightycleave = ['9L1']; + this.modData('Learnsets', 'dugtrio').learnset.saltcure = ['9L1']; + this.modData('Learnsets', 'dugtrio').learnset.acrobatics = ['9L1']; + + this.modData('Learnsets', 'altaria').learnset.beakblast = ['9L1']; + this.modData('Learnsets', 'altaria').learnset.return = ['9L1']; + this.modData('Learnsets', 'altaria').learnset.explosion = ['9L1']; + + this.modData('Learnsets', 'tyranitar').learnset.stoneaxe = ['9L1']; + this.modData('Learnsets', 'tyranitar').learnset.ceaselessedge = ['9L1']; + this.modData('Learnsets', 'tyranitar').learnset.kowtowcleave = ['9L1']; + this.modData('Learnsets', 'tyranitar').learnset.pursuit = ['9L1']; + this.modData('Learnsets', 'tyranitar').learnset.switcheroo = ['9L1']; + this.modData('Learnsets', 'tyranitar').learnset.accelerock = ['9L1']; + this.modData('Learnsets', 'tyranitar').learnset.dracometeor = ['9L1']; + this.modData('Learnsets', 'tyranitar').learnset.mysticalpower = ['9L1']; + this.modData('Learnsets', 'tyranitar').learnset.sandsearstorm = ['9L1']; + + this.modData('Learnsets', 'mimikyu').learnset.spiritshackle = ['9L1']; + this.modData('Learnsets', 'mimikyu').learnset.uturn = ['9L1']; + this.modData('Learnsets', 'mimikyu').learnset.obstruct = ['9L1']; + + this.modData('Learnsets', 'mesprit').learnset.agility = ['9L1']; + this.modData('Learnsets', 'mesprit').learnset.storedpower = ['9L1']; + this.modData('Learnsets', 'mesprit').learnset.torchsong = ['9L1']; + this.modData('Learnsets', 'mesprit').learnset.cosmicpower = ['9L1']; + this.modData('Learnsets', 'mesprit').learnset.aquaring = ['9L1']; + this.modData('Learnsets', 'mesprit').learnset.freezedry = ['9L1']; + + this.modData('Learnsets', 'electrode').learnset.encore = ['9L1']; + this.modData('Learnsets', 'electrode').learnset.rapidspin = ['9L1']; + this.modData('Learnsets', 'electrode').learnset.explosion = ['9L1']; + this.modData('Learnsets', 'electrode').learnset.finalgambit = ['9L1']; + this.modData('Learnsets', 'electrode').learnset.healingwish = ['9L1']; + this.modData('Learnsets', 'electrode').learnset.lunardance = ['9L1']; + this.modData('Learnsets', 'electrode').learnset.memento = ['9L1']; + this.modData('Learnsets', 'electrode').learnset.mistyexplosion = ['9L1']; + this.modData('Learnsets', 'electrode').learnset.selfdestruct = ['9L1']; + + this.modData('Learnsets', 'taurospaldeacombat').learnset.extremespeed = ['9L1']; + this.modData('Learnsets', 'taurospaldeacombat').learnset.uturn = ['9L1']; + this.modData('Learnsets', 'taurospaldeacombat').learnset.knockoff = ['9L1']; + + this.modData('Learnsets', 'chiyu').learnset.splash = ['9L1']; + this.modData('Learnsets', 'chiyu').learnset.tripledive = ['9L1']; + this.modData('Learnsets', 'chiyu').learnset.pyroball = ['9L1']; + this.modData('Learnsets', 'chiyu').learnset.knockoff = ['9L1']; + this.modData('Learnsets', 'chiyu').learnset.suckerpunch = ['9L1']; + + this.modData('Learnsets', 'wochien').learnset.partingshot = ['9L1']; + this.modData('Learnsets', 'wochien').learnset.strengthsap = ['9L1']; + this.modData('Learnsets', 'wochien').learnset.bouncingbubble = ['9L1']; + + this.modData('Learnsets', 'staraptor').learnset.jumpkick = ['9L1']; + this.modData('Learnsets', 'staraptor').learnset.flareblitz = ['9L1']; + this.modData('Learnsets', 'staraptor').learnset.wavecrash = ['9L1']; + this.modData('Learnsets', 'staraptor').learnset.headsmash = ['9L1']; + + this.modData('Learnsets', 'archaludon').learnset.scald = ['9L1']; + this.modData('Learnsets', 'archaludon').learnset.hydropump = ['9L1']; + + this.modData('Learnsets', 'malamar').learnset.willowisp = ['9L1']; + this.modData('Learnsets', 'malamar').learnset.recover = ['9L1']; + this.modData('Learnsets', 'malamar').learnset.eeriespell = ['9L1']; + this.modData('Learnsets', 'malamar').learnset.sweetkiss = ['9L1']; + this.modData('Learnsets', 'malamar').learnset.spiritbreak = ['9L1']; + + this.modData('Learnsets', 'empoleon').learnset.nastyplot = ['9L1']; + this.modData('Learnsets', 'empoleon').learnset.watershuriken = ['9L1']; + this.modData('Learnsets', 'empoleon').learnset.tachyoncutter = ['9L1']; + this.modData('Learnsets', 'empoleon').learnset.secretsword = ['9L1']; + + this.modData('Learnsets', 'regieleki').learnset.blazingtorque = ['9L1']; + this.modData('Learnsets', 'regieleki').learnset.soak = ['9L1']; + + this.modData('Learnsets', 'lycanrocmidnight').learnset.accelerock = ['9L1']; + this.modData('Learnsets', 'lycanrocmidnight').learnset.bonerush = ['9L1']; + this.modData('Learnsets', 'lycanrocmidnight').learnset.stormthrow = ['9L1']; + + this.modData('Learnsets', 'lycanroc').learnset.firelash = ['9L1']; + this.modData('Learnsets', 'lycanroc').learnset.uturn = ['9L1']; + this.modData('Learnsets', 'lycanroc').learnset.spikes = ['9L1']; + + this.modData('Learnsets', 'lycanrocdusk').learnset.mountainmaw = ['9L1']; + this.modData('Learnsets', 'lycanrocdusk').learnset.icefang = ['9L1']; + + this.modData('Learnsets', 'dodrio').learnset.triplearrows = ['9L1']; + this.modData('Learnsets', 'dodrio').learnset.obstruct = ['9L1']; + + this.modData('Learnsets', 'whiscash').learnset.toxic = ['9L1']; + this.modData('Learnsets', 'whiscash').learnset.flipturn = ['9L1']; + this.modData('Learnsets', 'whiscash').learnset.scald = ['9L1']; + + this.modData('Learnsets', 'hippowdon').learnset.saltcure = ['9L1']; + + this.modData('Learnsets', 'cramorant').learnset.beakblast = ['9L1']; + + this.modData('Learnsets', 'grafaiai').learnset.bulkup = ['9L1']; + this.modData('Learnsets', 'grafaiai').learnset.scavenge = ['9L1']; + this.modData('Learnsets', 'grafaiai').learnset.drainpunch = ['9L1']; + + this.modData('Learnsets', 'kyurem').learnset.earthquake = ['9L1']; + + this.modData('Learnsets', 'roaringmoon').learnset.firelash = ['9L1']; + this.modData('Learnsets', 'roaringmoon').learnset.glaiverush = ['9L1']; + + this.modData('Learnsets', 'milotic').learnset.bouncybubble = ['9L1']; + this.modData('Learnsets', 'milotic').learnset.moonblast = ['9L1']; + + this.modData('Learnsets', 'gogoat').learnset.headsmash = ['9L1']; + + this.modData('Learnsets', 'clodsire').learnset.barbbarrage = ['9L1']; + + this.modData('Learnsets', 'masquerain').learnset.roost = ['9L1']; + this.modData('Learnsets', 'masquerain').learnset.darkpulse = ['9L1']; + + this.modData('Learnsets', 'kyuremblack').learnset.icehammer = ['9L1']; + this.modData('Learnsets', 'kyuremblack').learnset.dragonhammer = ['9L1']; + this.modData('Learnsets', 'kyuremblack').learnset.roost = ['9L1']; + this.modData('Learnsets', 'kyuremblack').learnset.earthquake = ['9L1']; + + this.modData('Learnsets', 'ironthorns').learnset.ironstrike = ['9L1']; + this.modData('Learnsets', 'ironthorns').learnset.knockoff = ['9L1']; + + this.modData('Learnsets', 'chienpao').learnset.bulkup = ['9L1']; + this.modData('Learnsets', 'chienpao').learnset.iciclestorm = ['9L1']; + + this.modData('Learnsets', 'pelipper').learnset.bleakwindstorm = ['9L1']; + this.modData('Learnsets', 'pelipper').learnset.sandsearstorm = ['9L1']; + this.modData('Learnsets', 'pelipper').learnset.wildboltstorm = ['9L1']; + this.modData('Learnsets', 'pelipper').learnset.springtidestorm = ['9L1']; + + this.modData('Learnsets', 'araquanid').learnset.surgingstrikes = ['9L1']; + this.modData('Learnsets', 'araquanid').learnset.flipturn = ['9L1']; + this.modData('Learnsets', 'araquanid').learnset.silktrap = ['9L1']; + this.modData('Learnsets', 'araquanid').learnset.firstimpression = ['9L1']; + + this.modData('Learnsets', 'avalugghisui').learnset.mountainmaw = ['9L1']; + + this.modData('Learnsets', 'swalot').learnset.earthpower = ['9L1']; + + this.modData('Learnsets', 'zapdosgalar').learnset.wildcharge = ['9L1']; + + this.modData('Learnsets', 'phione').learnset.workup = ['9L1']; + this.modData('Learnsets', 'phione').learnset.tidalsurge = ['9L1']; + this.modData('Learnsets', 'phione').learnset.geyser = ['9L1']; + + this.modData('Learnsets', 'sudowoodo').learnset.bonsaibounce = ['9L1']; + this.modData('Learnsets', 'sudowoodo').learnset.synthesis = ['9L1']; + + this.modData('Learnsets', 'dondozo').learnset.hornleech = ['9L1']; + this.modData('Learnsets', 'dondozo').learnset.fishiousrend = ['9L1']; + this.modData('Learnsets', 'dondozo').learnset.recover = ['9L1']; + this.modData('Learnsets', 'dondozo').learnset.flipturn = ['9L1']; + + this.modData('Learnsets', 'golurk').learnset.shatteredseal = ['9L1']; + this.modData('Learnsets', 'golurk').learnset.trickroom = ['9L1']; + this.modData('Learnsets', 'golurk').learnset.headlongrush = ['9L1']; + + this.modData('Learnsets', 'meowscarada').learnset.encore = ['9L1']; + this.modData('Learnsets', 'meowscarada').learnset.spectralthief = ['9L1']; + + this.modData('Learnsets', 'infernape').learnset.alloutassault = ['9L1']; + this.modData('Learnsets', 'infernape').learnset.mindblown = ['9L1']; + this.modData('Learnsets', 'infernape').learnset.bitterblade = ['9L1']; + + this.modData('Learnsets', 'salamence').learnset.uturn = ['9L1']; + this.modData('Learnsets', 'salamence').learnset.dragonascent = ['9L1']; + this.modData('Learnsets', 'salamence').learnset.bloodmoon = ['9L1']; + + this.modData('Learnsets', 'urshifu').learnset.agility = ['9L1']; + this.modData('Learnsets', 'urshifu').learnset.aquajet = ['9L1']; + + this.modData('Learnsets', 'urshifurapidstrike').learnset.agility = ['9L1']; + this.modData('Learnsets', 'urshifurapidstrike').learnset.suckerpunch = ['9L1']; + + this.modData('Learnsets', 'stonjourner').learnset.rockwrecker = ['9L1']; + this.modData('Learnsets', 'stonjourner').learnset.meteorassault = ['9L1']; + this.modData('Learnsets', 'stonjourner').learnset.skyattack = ['9L1']; + this.modData('Learnsets', 'stonjourner').learnset.solarblade = ['9L1']; + + this.modData('Learnsets', 'veluza').learnset.ragefist = ['9L1']; + + this.modData('Learnsets', 'ogerpon').learnset.leafblade = ['9L1']; + this.modData('Learnsets', 'ogerpon').learnset.crabhammer = ['9L1']; + this.modData('Learnsets', 'ogerpon').learnset.stoneedge = ['9L1']; + + this.modData('Learnsets', 'dachsbun').learnset.nuzzle = ['9L1']; + this.modData('Learnsets', 'dachsbun').learnset.spiritbreak = ['9L1']; + this.modData('Learnsets', 'dachsbun').learnset.morningsun = ['9L1']; + + this.modData('Learnsets', 'magneton').learnset.magnetbomb = ['9L1']; + + this.modData('Learnsets', 'delibird').learnset.iciclestorm = ['9L1']; + + this.modData('Learnsets', 'hitmontop').learnset.bulletseed = ['9L1']; + + this.modData('Learnsets', 'articunogalar').learnset.aeroblast = ['9L1']; + this.modData('Learnsets', 'articunogalar').learnset.oblivionwing = ['9L1']; + this.modData('Learnsets', 'articunogalar').learnset.aurasphere = ['9L1']; + + this.modData('Learnsets', 'vaporeon').learnset.voltswitch = ['9L1']; + this.modData('Learnsets', 'vaporeon').learnset.burnout = ['9L1']; + + this.modData('Learnsets', 'garganacl').learnset.thunderwave = ['9L1']; + this.modData('Learnsets', 'garganacl').learnset.saltcurse = ['9L1']; + this.modData('Learnsets', 'garganacl').learnset.purify = ['9L1']; + + this.modData('Learnsets', 'swanna').learnset.bleakwindstorm = ['9L1']; + this.modData('Learnsets', 'swanna').learnset.steameruption = ['9L1']; + this.modData('Learnsets', 'swanna').learnset.flyby = ['9L1']; + + this.modData('Learnsets', 'typhlosion').learnset.heatsink = ['9L1']; + this.modData('Learnsets', 'typhlosion').learnset.steameruption = ['9L1']; + this.modData('Learnsets', 'typhlosion').learnset.matchagotcha = ['9L1']; + this.modData('Learnsets', 'typhlosion').learnset.calmmind = ['9L1']; + this.modData('Learnsets', 'typhlosion').learnset.morningsun = ['9L1']; + + this.modData('Learnsets', 'terapagos').learnset.nastyplot = ['9L1']; + + this.modData('Learnsets', 'tatsugiri').learnset.switcheroo = ['9L1']; + this.modData('Learnsets', 'tatsugiri').learnset.sashimishuffle = ['9L1']; + this.modData('Learnsets', 'tatsugiri').learnset.twister = ['9L1']; + this.modData('Learnsets', 'tatsugiri').learnset.waterspout = ['9L1']; + + this.modData('Learnsets', 'flapple').learnset.earthquake = ['9L1']; + this.modData('Learnsets', 'flapple').learnset.grabapple = ['9L1']; + this.modData('Learnsets', 'flapple').learnset.flareblitz = ['9L1']; + + this.modData('Learnsets', 'genesect').learnset.earthquake = ['9L1']; + this.modData('Learnsets', 'genesect').learnset.sunsteelstrike = ['9L1']; + this.modData('Learnsets', 'genesect').learnset.behemothblade = ['9L1']; + this.modData('Learnsets', 'genesect').learnset.makeitrain = ['9L1']; + this.modData('Learnsets', 'genesect').learnset.tachyoncutter = ['9L1']; + + this.modData('Learnsets', 'honchkrow').learnset.crowverload = ['9L1']; + this.modData('Learnsets', 'honchkrow').learnset.oblivionwing = ['9L1']; + this.modData('Learnsets', 'honchkrow').learnset.closecombat = ['9L1']; + + this.modData('Learnsets', 'primeape').learnset.knockoff = ['9L1']; + this.modData('Learnsets', 'primeape').learnset.ironhead = ['9L1']; + + this.modData('Learnsets', 'rillaboom').learnset.naturesfury = ['9L1']; + this.modData('Learnsets', 'rillaboom').learnset.landswrath = ['9L1']; + + this.modData('Learnsets', 'mandibuzz').learnset.fling = ['9L1']; + this.modData('Learnsets', 'mandibuzz').learnset.scavenge = ['9L1']; + this.modData('Learnsets', 'mandibuzz').learnset.bonemerang = ['9L1']; + + this.modData('Learnsets', 'feraligatr').learnset.firefang = ['9L1']; + this.modData('Learnsets', 'feraligatr').learnset.thunderfang = ['9L1']; + this.modData('Learnsets', 'feraligatr').learnset.poisonfang = ['9L1']; + + this.modData('Learnsets', 'salazzle').learnset.magmastorm = ['9L1']; + this.modData('Learnsets', 'salazzle').learnset.malignantchain = ['9L1']; + this.modData('Learnsets', 'salazzle').learnset.psychicnoise = ['9L1']; + this.modData('Learnsets', 'salazzle').learnset.banefulbunker = ['9L1']; + + this.modData('Learnsets', 'kyogre').learnset.hurricane = ['9L1']; + this.modData('Learnsets', 'kyogre').learnset.tidalsurge = ['9L1']; + + this.modData('Learnsets', 'azelf').learnset.rapidspin = ['9L1']; + this.modData('Learnsets', 'azelf').learnset.lootbox = ['9L1']; + this.modData('Learnsets', 'azelf').learnset.acupressure = ['9L1']; + + this.modData('Learnsets', 'decidueye').learnset.sinisterarrows = ['9L1']; + + this.modData('Learnsets', 'ogerpon').learnset.sappyseed = ['9L1']; + this.modData('Learnsets', 'ogerpon').learnset.thousandwaves = ['9L1']; + + this.modData('Learnsets', 'glimmora').learnset.icebeam = ['9L1']; + this.modData('Learnsets', 'glimmora').learnset.malignantchain = ['9L1']; + + this.modData('Learnsets', 'wobbuffet').learnset.nightshade = ['9L1']; + this.modData('Learnsets', 'wobbuffet').learnset.guillotine = ['9L1']; + this.modData('Learnsets', 'wobbuffet').learnset.shedtail = ['9L1']; + + this.modData('Learnsets', 'raticate').learnset.lastbreakfast = ['9L1']; + }, +}; diff --git a/data/mods/gen1/conditions.ts b/data/mods/gen1/conditions.ts index 7947c9d867..ea7d52cfe5 100644 --- a/data/mods/gen1/conditions.ts +++ b/data/mods/gen1/conditions.ts @@ -80,6 +80,9 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa onAfterMoveSelf(pokemon) { if (pokemon.statusState.time <= 0) pokemon.cureStatus(); }, + onDisableMove(target) { + target.maybeLocked = false; // the player knows it is locked + }, }, frz: { name: 'frz', @@ -98,6 +101,9 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa target.cureStatus(); } }, + onDisableMove(target) { + target.maybeLocked = false; // the player knows it is locked + }, }, psn: { name: 'psn', @@ -202,8 +208,11 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa onAccuracy(accuracy, target, source, move) { if (source === this.effectState.source) return true; }, + onDisableMovePriority: 1, // higher priority so it gets undone by frz, slp or Bide onDisableMove(target) { - target.maybeLocked = true; + if (this.effectState.maybeLocked) { + target.maybeLocked = true; + } }, }, fakepartiallytrapped: { @@ -211,6 +220,7 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa // Wrap ended this turn, but you don't know that // until you try to use an attack duration: 2, + onDisableMovePriority: 1, // higher priority so it gets undone by frz, slp or Bide onDisableMove(target) { target.maybeLocked = true; }, @@ -230,9 +240,6 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa this.effectState.locked = foe; foe.addVolatile('partiallytrapped', target, effect); }, - onOverrideAction(pokemon, target, move) { - return this.effectState.move; - }, onBeforeMove(pokemon, target, move) { if (target !== this.effectState.locked) { pokemon.removeVolatile('partialtrappinglock'); @@ -252,13 +259,18 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa } } else { target.addVolatile('partiallytrapped', pokemon, move); + if (this.effectState.totalDuration - this.effectState.duration! > 0) { + target.volatiles['partiallytrapped'].maybeLocked = true; + } } }, - onLockMove() { + onSemiLockMove() { return this.effectState.move; }, onDisableMove(pokemon) { - pokemon.maybeLocked = true; + if (this.effectState.totalDuration - this.effectState.duration! > 1) { + pokemon.maybeLocked = true; + } }, }, mustrecharge: { diff --git a/data/mods/gen1/moves.ts b/data/mods/gen1/moves.ts index cc49b919aa..9bb9510f3f 100644 --- a/data/mods/gen1/moves.ts +++ b/data/mods/gen1/moves.ts @@ -32,7 +32,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { }, bide: { inherit: true, - priority: 0, accuracy: true, condition: { onStart(pokemon) { @@ -60,15 +59,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { this.add('-activate', pokemon, 'Bide'); return false; }, - onDisableMove(pokemon) { - if (!pokemon.hasMove('bide')) { - return; - } - for (const moveSlot of pokemon.moveSlots) { - if (moveSlot.id !== 'bide') { - pokemon.disableMove(moveSlot.id); - } - } + onSemiLockMove: 'bide', + onDisableMove(target) { + target.maybeLocked = false; // the player knows it is locked }, }, type: "???", // Will look as Normal but it's STAB-less @@ -334,6 +327,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { for (const pokemon of this.getAllActive()) { pokemon.clearBoosts(); if (pokemon !== source) { + if (['frz', 'slp'].includes(pokemon.status)) { + pokemon.side.lastSelectedMove = 'cannotmove' as ID; + if (this.queue.willMove(pokemon)) { + this.queue.changeAction(pokemon, { choice: 'move', pokemon, moveid: 'cannotmove' }); + } + } pokemon.cureStatus(true); } if (pokemon.status === 'tox') { @@ -463,7 +462,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { move: move.name, id: move.id, pp: source.moveSlots[moveslot].pp, - maxpp: move.pp * 8 / 5, + maxpp: this.calculatePP(move, source.ppUps[moveslot] || 0), target: move.target, disabled: false, used: false, diff --git a/data/mods/gen1/scripts.ts b/data/mods/gen1/scripts.ts index a8d63f7282..83812bfa95 100644 --- a/data/mods/gen1/scripts.ts +++ b/data/mods/gen1/scripts.ts @@ -33,6 +33,17 @@ export const Scripts: ModdedBattleScriptsData = { if (!amount) amount = 1; ppData.pp -= amount; + + if (ppData.pp < 0) { + this.battle.hint("In Gen 1, if a Pokémon is forced to use a move with 0 PP, the move will underflow to have 63 PP."); + } + ppData.pp = ((ppData.pp % 64) + 64) % 64; + + if (ppData.virtual && !this.transformed) { + // sync PP from Mimic's slot, or Metronome/Mirror Move that called Mimic + this.baseMoveSlots[this.side.lastSelectedMoveSlot].pp = ppData.pp; + } + return amount; }, getStat(statName, unmodified) { @@ -146,50 +157,62 @@ export const Scripts: ModdedBattleScriptsData = { } } - // If a faster partial trapping move misses against a user of Hyper Beam during a recharge turn, - // the user of Hyper Beam will automatically use Hyper Beam during that turn. - if (move.id === 'recharge' && !pokemon.volatiles['mustrecharge'] && !pokemon.volatiles['partiallytrapped']) { - move = this.battle.dex.getActiveMove('hyperbeam'); - this.battle.hint(`In Gen 1, partial trapping moves like Wrap remove Hyper Beam recharges. ` + - `If the target would have recharged, it will automatically use Hyper Beam instead.`, true); + const abortMove = () => { + this.battle.clearActiveMove(true); + this.battle.runEvent('AfterMoveSelf', pokemon, target, move); + }; + + if (move.id === 'cannotmove') { + if (pokemon.status === 'slp') { + this.battle.hint( + "In Gen 1, if a Pokémon spends a turn partially trapped and switches to a Pokémon that is asleep, " + + "the sleep counter will not decrease until you select a move with a different Pokémon." + ); + } else if (pokemon.getLockedMove()) { + this.battle.hint( + "In Gen 1, when Haze cures the sleep/freeze status of a Pokémon during a multi-turn move, " + + "that Pokémon will become soft-locked." + ); + } else if (pokemon.getSemiLockedMove()) { + this.battle.hint( + "In Gen 1, when Haze cures the sleep/freeze status of a Pokémon during Bide, " + + "the move execution will never resolve." + ); + } + abortMove(); + return; } if (target?.subFainted) target.subFainted = null; this.battle.setActiveMove(move, pokemon, target); - if (pokemon.moveThisTurn || move.id === 'cantmove' || !this.battle.runEvent('BeforeMove', pokemon, target, move)) { - this.battle.clearActiveMove(true); - // This is only run for sleep. - this.battle.runEvent('AfterMoveSelf', pokemon, target, move); + if (pokemon.moveThisTurn || !this.battle.runEvent('BeforeMove', pokemon, target, move)) { + abortMove(); return; } if (move.beforeMoveCallback?.call(this.battle, pokemon, target, move)) { - this.battle.clearActiveMove(true); + abortMove(); return; } if (move.id !== 'struggle') { - const lockedMove = pokemon.getLockedMove(); + const lockedMove = pokemon.getLockedMove() || pokemon.getSemiLockedMove(); if (lockedMove) sourceEffect = move; // Locked moves don't deduct PP // Two-turn moves like Sky Attack deduct PP on their second turn. if ((!lockedMove && !TWO_TURN_MOVES.includes(move.id)) || pokemon.volatiles['twoturnmove']) { const moveSlot = pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot); - if (moveSlot && pokemon.deductPP(moveSlot.id, null, target) && moveSlot.pp < 0) { - moveSlot.pp += 64; - this.battle.hint("In Gen 1, if a Pokémon is forced to use a move with 0 PP, the move will underflow to have 63 PP."); - } + if (moveSlot) pokemon.deductPP(moveSlot.id, null, target); } - if (move.id !== pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot)?.id) { + if (!lockedMove && move.id !== pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot)?.id) { this.battle.hint("Desync Clause Mod activated!"); this.battle.hint( - "In Gen 1, a Pokémon that thaws out might try to use a move that doesn't match the move " + - "of the slot it last selected (switches reset to the first slot).", + "In Gen 1, a Pokémon might default to using a move that doesn't match the move of the slot it last selected.", ); - this.battle.clearActiveMove(true); + abortMove(); return; } } @@ -211,8 +234,16 @@ export const Scripts: ModdedBattleScriptsData = { if (sourceEffect) move.sourceEffect = sourceEffect.id; if (sourceEffect?.id === 'metronome' || sourceEffect?.id === 'mirrormove') { - const moveSlot = pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot); - if (moveSlot) pokemon.deductPP(moveSlot.id, -1, target); + if (TWO_TURN_MOVES.includes(move.id)) { + const moveSlot = pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot); + if (moveSlot) pokemon.deductPP(moveSlot.id, -1, target); + } + // FIXME: this should happen even if the slot was empty before Transform + // https://bulbapedia.bulbagarden.net/wiki/List_of_Transform_glitches#Transform_.2B_Mirror_Move.2FMetronome_PP_error + if (pokemon.transformed && pokemon.side.lastSelectedMoveSlot < pokemon.baseMoveSlots.length) { + pokemon.baseMoveSlots[pokemon.side.lastSelectedMoveSlot].pp += 1; + pokemon.baseMoveSlots[pokemon.side.lastSelectedMoveSlot].pp %= 64; + } } this.battle.singleEvent('ModifyMove', move, null, pokemon, target, move, move); @@ -434,7 +465,7 @@ export const Scripts: ModdedBattleScriptsData = { let i: number; for (i = 0; i < hits && target.hp && pokemon.hp; i++) { move.hit = i + 1; - if (move.hit === hits) move.lastHit = true; + move.lastHit = move.hit === hits; moveDamage = this.moveHit(target, pokemon, move); if (moveDamage === false) break; damage = (moveDamage || 0); diff --git a/data/mods/gen1stadium/scripts.ts b/data/mods/gen1stadium/scripts.ts index 04071bb678..fb6380a046 100644 --- a/data/mods/gen1stadium/scripts.ts +++ b/data/mods/gen1stadium/scripts.ts @@ -93,8 +93,7 @@ export const Scripts: ModdedBattleScriptsData = { return; } } - let lockedMove = this.battle.runEvent('LockMove', pokemon); - if (lockedMove === true) lockedMove = false; + const lockedMove = pokemon.getLockedMove() || pokemon.getSemiLockedMove(); if ( !lockedMove && (!pokemon.volatiles['partialtrappinglock'] || pokemon.volatiles['partialtrappinglock'].locked !== target) @@ -332,7 +331,7 @@ export const Scripts: ModdedBattleScriptsData = { let i: number; for (i = 0; i < hits && target.hp && pokemon.hp; i++) { move.hit = i + 1; - if (move.hit === hits) move.lastHit = true; + move.lastHit = move.hit === hits; moveDamage = this.moveHit(target, pokemon, move); if (moveDamage === false) break; damage = (moveDamage || 0); diff --git a/data/mods/gen2/formats-data.ts b/data/mods/gen2/formats-data.ts index c0618e54e9..982567ea6a 100644 --- a/data/mods/gen2/formats-data.ts +++ b/data/mods/gen2/formats-data.ts @@ -465,7 +465,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NU", }, porygon2: { - tier: "UUBL", + tier: "(OU)", }, omanyte: { tier: "ZU", diff --git a/data/mods/gen2/moves.ts b/data/mods/gen2/moves.ts index 92b3575d2b..c75e5a214f 100644 --- a/data/mods/gen2/moves.ts +++ b/data/mods/gen2/moves.ts @@ -55,6 +55,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { durationCallback(target, source, effect) { return this.random(3, 5); }, + onLockMove: undefined, // no inherit + onSemiLockMove: 'bide', }, }, counter: { @@ -755,7 +757,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { triattack: { inherit: true, onHit(target, source, move) { - move.statusRoll = ['par', 'frz', 'brn'][this.random(3)]; + move.statusRoll = this.sample(['par', 'frz', 'brn']); }, secondary: { chance: 20, diff --git a/data/mods/gen2/scripts.ts b/data/mods/gen2/scripts.ts index d564f84d97..5bb79245ba 100644 --- a/data/mods/gen2/scripts.ts +++ b/data/mods/gen2/scripts.ts @@ -125,8 +125,7 @@ export const Scripts: ModdedBattleScriptsData = { } } pokemon.lastDamage = 0; - let lockedMove = this.battle.runEvent('LockMove', pokemon); - if (lockedMove === true) lockedMove = false; + const lockedMove = pokemon.getLockedMove() || pokemon.getSemiLockedMove(); if (!lockedMove) { if (!pokemon.deductPP(move, null, target) && (move.id !== 'struggle')) { this.battle.add('cant', pokemon, 'nopp', move); @@ -273,7 +272,7 @@ export const Scripts: ModdedBattleScriptsData = { for (i = 0; i < hits && target.hp && pokemon.hp; i++) { if (pokemon.status === 'slp' && !isSleepUsable) break; move.hit = i + 1; - if (move.hit === hits) move.lastHit = true; + move.lastHit = move.hit === hits; moveDamage = this.moveHit(target, pokemon, move); if (moveDamage === false) break; if (nullDamage && (moveDamage || moveDamage === 0 || moveDamage === undefined)) nullDamage = false; diff --git a/data/mods/gen2stadium2/scripts.ts b/data/mods/gen2stadium2/scripts.ts index 9a9ddce00a..3487c31df4 100644 --- a/data/mods/gen2stadium2/scripts.ts +++ b/data/mods/gen2stadium2/scripts.ts @@ -208,7 +208,7 @@ export const Scripts: ModdedBattleScriptsData = { for (i = 0; i < hits && target.hp && pokemon.hp; i++) { if (pokemon.status === 'slp' && !isSleepUsable) break; move.hit = i + 1; - if (move.hit === hits) move.lastHit = true; + move.lastHit = move.hit === hits; moveDamage = this.moveHit(target, pokemon, move); if (moveDamage === false) break; if (nullDamage && (moveDamage || moveDamage === 0 || moveDamage === undefined)) nullDamage = false; diff --git a/data/mods/gen3/abilities.ts b/data/mods/gen3/abilities.ts index 33ce5bcff8..05d84a50c5 100644 --- a/data/mods/gen3/abilities.ts +++ b/data/mods/gen3/abilities.ts @@ -12,15 +12,9 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa effectspore: { inherit: true, onDamagingHit(damage, target, source, move) { - if (damage && move.flags['contact'] && !source.status) { - const r = this.random(300); - if (r < 10) { - source.setStatus('slp', target); - } else if (r < 20) { - source.setStatus('par', target); - } else if (r < 30) { - source.setStatus('psn', target); - } + if (damage && move.flags['contact'] && this.randomChance(1, 10)) { + const status = this.sample(['slp', 'par', 'psn']); + source.trySetStatus(status, target); } }, }, diff --git a/data/mods/gen3/formats-data.ts b/data/mods/gen3/formats-data.ts index e87cfe3add..dc3935bb15 100644 --- a/data/mods/gen3/formats-data.ts +++ b/data/mods/gen3/formats-data.ts @@ -465,7 +465,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "ZU", }, porygon2: { - tier: "UUBL", + tier: "(OU)", }, omanyte: { tier: "PU", @@ -732,7 +732,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "UUBL", }, raikou: { - tier: "UUBL", + tier: "(OU)", }, entei: { tier: "UUBL", @@ -1137,7 +1137,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "UUBL", }, regice: { - tier: "UUBL", + tier: "(OU)", }, registeel: { tier: "UUBL", diff --git a/data/mods/gen3/scripts.ts b/data/mods/gen3/scripts.ts index fd0d8b31a8..de3150b0fd 100644 --- a/data/mods/gen3/scripts.ts +++ b/data/mods/gen3/scripts.ts @@ -409,6 +409,7 @@ export const Scripts: ModdedBattleScriptsData = { for (i = 0; i < hits && target.hp && pokemon.hp; i++) { if (pokemon.status === 'slp' && !isSleepUsable) break; move.hit = i + 1; + move.lastHit = move.hit === hits; if (move.multiaccuracy && i > 0) { accuracy = move.accuracy; diff --git a/data/mods/gen3frlg/abilities.ts b/data/mods/gen3frlg/abilities.ts new file mode 100644 index 0000000000..adfe8653b3 --- /dev/null +++ b/data/mods/gen3frlg/abilities.ts @@ -0,0 +1,63 @@ +function attemptStatuses(battle: Battle, target: Pokemon, source: Pokemon, move: ActiveMove, status: string) { + const attackerStatused = source.trySetStatus(status, target); + if (move.multihit && move.id !== 'triplekick' && + (move.lastHit || (attackerStatused && status === 'slp')) && + battle.randomChance(1, 100)) { + const defenderStatused = target.trySetStatus(status, target, move); + if (defenderStatused) { + battle.hint("In Pokemon Ruby, Sapphire, FireRed, LeafGreen, and Colosseum, if the final hit of a multihit move (except for Triple Kick) that makes contact triggers an ability that inflicts status, then there is a 1% chance that the defender is afflicted by the same status."); + } + } +} + +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + effectspore: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (damage && move.flags['contact'] && !source.status) { + const r = this.random(300); + let status = null; + if (r < 10) { + status = 'slp'; + } else if (r < 20) { + status = 'par'; + } else if (r < 30) { + status = 'psn'; + } + if (status) { + attemptStatuses(this, target, source, move, status); + } + } + }, + }, + flamebody: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (damage && move.flags['contact']) { + if (this.randomChance(1, 3)) { + attemptStatuses(this, target, source, move, 'brn'); + } + } + }, + }, + poisonpoint: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (damage && move.flags['contact']) { + if (this.randomChance(1, 3)) { + attemptStatuses(this, target, source, move, 'psn'); + } + } + }, + }, + static: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (damage && move.flags['contact']) { + if (this.randomChance(1, 3)) { + attemptStatuses(this, target, source, move, 'par'); + } + } + }, + }, +}; diff --git a/data/mods/gen3frlg/formats-data.ts b/data/mods/gen3frlg/formats-data.ts new file mode 100644 index 0000000000..f74b423e0c --- /dev/null +++ b/data/mods/gen3frlg/formats-data.ts @@ -0,0 +1,1354 @@ +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { + bulbasaur: { + tier: "LC", + }, + ivysaur: { + tier: "NFE", + }, + venusaur: { + tier: "OU", + }, + charmander: { + tier: "LC", + }, + charmeleon: { + tier: "NFE", + }, + charizard: { + tier: "OU", + }, + squirtle: { + tier: "LC", + }, + wartortle: { + tier: "NFE", + }, + blastoise: { + tier: "OU", + }, + caterpie: { + tier: "LC", + }, + metapod: { + tier: "NFE", + }, + butterfree: { + tier: "UU", + }, + weedle: { + tier: "LC", + }, + kakuna: { + tier: "NFE", + }, + beedrill: { + tier: "UU", + }, + pidgey: { + tier: "LC", + }, + pidgeotto: { + tier: "NFE", + }, + pidgeot: { + tier: "UU", + }, + rattata: { + tier: "LC", + }, + raticate: { + tier: "UU", + }, + spearow: { + tier: "LC", + }, + fearow: { + tier: "UU", + }, + ekans: { + tier: "LC", + }, + arbok: { + tier: "UU", + }, + pichu: { + tier: "LC", + }, + pikachu: { + tier: "NFE", + }, + raichu: { + tier: "UU", + }, + sandshrew: { + tier: "LC", + }, + sandslash: { + tier: "UU", + }, + nidoranf: { + tier: "LC", + }, + nidorina: { + tier: "NFE", + }, + nidoqueen: { + tier: "UU", + }, + nidoranm: { + tier: "LC", + }, + nidorino: { + tier: "NFE", + }, + nidoking: { + tier: "UU", + }, + cleffa: { + tier: "LC", + }, + clefairy: { + tier: "NFE", + }, + clefable: { + tier: "UU", + }, + vulpix: { + tier: "LC", + }, + ninetales: { + tier: "OU", + }, + igglybuff: { + tier: "LC", + }, + jigglypuff: { + tier: "NFE", + }, + wigglytuff: { + tier: "UU", + }, + zubat: { + tier: "LC", + }, + golbat: { + tier: "NFE", + }, + crobat: { + tier: "UU", + }, + oddish: { + tier: "LC", + }, + gloom: { + tier: "NFE", + }, + vileplume: { + tier: "OU", + }, + bellossom: { + tier: "UU", + }, + paras: { + tier: "LC", + }, + parasect: { + tier: "UU", + }, + venonat: { + tier: "LC", + }, + venomoth: { + tier: "UU", + }, + diglett: { + tier: "LC", + }, + dugtrio: { + tier: "OU", + }, + meowth: { + tier: "LC", + }, + persian: { + tier: "UU", + }, + psyduck: { + tier: "LC", + }, + golduck: { + tier: "OU", + }, + mankey: { + tier: "LC", + }, + primeape: { + tier: "UU", + }, + growlithe: { + tier: "LC", + }, + arcanine: { + tier: "OU", + }, + poliwag: { + tier: "LC", + }, + poliwhirl: { + tier: "NFE", + }, + poliwrath: { + tier: "OU", + }, + politoed: { + tier: "UU", + }, + abra: { + tier: "LC", + }, + kadabra: { + tier: "NFE", + }, + alakazam: { + tier: "OU", + }, + machop: { + tier: "LC", + }, + machoke: { + tier: "NFE", + }, + machamp: { + tier: "OU", + }, + bellsprout: { + tier: "LC", + }, + weepinbell: { + tier: "NFE", + }, + victreebel: { + tier: "UU", + }, + tentacool: { + tier: "LC", + }, + tentacruel: { + tier: "UU", + }, + geodude: { + tier: "LC", + }, + graveler: { + tier: "NFE", + }, + golem: { + tier: "UU", + }, + ponyta: { + tier: "LC", + }, + rapidash: { + tier: "UU", + }, + slowpoke: { + tier: "LC", + }, + slowbro: { + tier: "OU", + }, + slowking: { + tier: "UU", + }, + magnemite: { + tier: "LC", + }, + magneton: { + tier: "OU", + }, + farfetchd: { + tier: "UU", + }, + doduo: { + tier: "LC", + }, + dodrio: { + tier: "UU", + }, + seel: { + tier: "LC", + }, + dewgong: { + tier: "UU", + }, + grimer: { + tier: "LC", + }, + muk: { + tier: "UU", + }, + shellder: { + tier: "LC", + }, + cloyster: { + tier: "OU", + }, + gastly: { + tier: "LC", + }, + haunter: { + tier: "NFE", + }, + gengar: { + tier: "OU", + }, + onix: { + tier: "LC", + }, + steelix: { + tier: "OU", + }, + drowzee: { + tier: "LC", + }, + hypno: { + tier: "UU", + }, + krabby: { + tier: "LC", + }, + kingler: { + tier: "UU", + }, + voltorb: { + tier: "LC", + }, + electrode: { + tier: "UU", + }, + exeggcute: { + tier: "LC", + }, + exeggutor: { + tier: "OU", + }, + cubone: { + tier: "LC", + }, + marowak: { + tier: "OU", + }, + tyrogue: { + tier: "LC", + }, + hitmonlee: { + tier: "UU", + }, + hitmonchan: { + tier: "UU", + }, + hitmontop: { + tier: "OU", + }, + lickitung: { + tier: "UU", + }, + koffing: { + tier: "LC", + }, + weezing: { + tier: "UU", + }, + rhyhorn: { + tier: "LC", + }, + rhydon: { + tier: "OU", + }, + chansey: { + tier: "UU", + }, + blissey: { + tier: "OU", + }, + tangela: { + tier: "UU", + }, + kangaskhan: { + tier: "UU", + }, + horsea: { + tier: "LC", + }, + seadra: { + tier: "NFE", + }, + kingdra: { + tier: "OU", + }, + goldeen: { + tier: "LC", + }, + seaking: { + tier: "UU", + }, + staryu: { + tier: "LC", + }, + starmie: { + tier: "OU", + }, + mrmime: { + tier: "OU", + }, + scyther: { + tier: "UU", + }, + scizor: { + tier: "OU", + }, + smoochum: { + tier: "LC", + }, + jynx: { + tier: "OU", + }, + elekid: { + tier: "LC", + }, + electabuzz: { + tier: "UU", + }, + magby: { + tier: "LC", + }, + magmar: { + tier: "UU", + }, + pinsir: { + tier: "UU", + }, + tauros: { + tier: "OU", + }, + magikarp: { + tier: "LC", + }, + gyarados: { + tier: "OU", + }, + lapras: { + tier: "OU", + }, + ditto: { + tier: "UU", + }, + eevee: { + tier: "LC", + }, + vaporeon: { + tier: "OU", + }, + jolteon: { + tier: "OU", + }, + flareon: { + tier: "UU", + }, + espeon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + umbreon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + porygon: { + tier: "UU", + }, + porygon2: { + tier: "OU", + }, + omanyte: { + tier: "LC", + }, + omastar: { + tier: "UU", + }, + kabuto: { + tier: "LC", + }, + kabutops: { + tier: "UU", + }, + aerodactyl: { + tier: "OU", + }, + snorlax: { + tier: "OU", + }, + articuno: { + tier: "UU", + }, + zapdos: { + tier: "OU", + }, + moltres: { + tier: "OU", + }, + dratini: { + tier: "LC", + }, + dragonair: { + tier: "NFE", + }, + dragonite: { + tier: "OU", + }, + mewtwo: { + tier: "Uber", + }, + mew: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + chikorita: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + bayleef: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + meganium: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + cyndaquil: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + quilava: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + typhlosion: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + totodile: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + croconaw: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + feraligatr: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + sentret: { + tier: "LC", + }, + furret: { + tier: "UU", + }, + hoothoot: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + noctowl: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + ledyba: { + tier: "LC", + }, + ledian: { + tier: "UU", + }, + spinarak: { + tier: "LC", + }, + ariados: { + tier: "UU", + }, + chinchou: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + lanturn: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + togepi: { + tier: "LC", + }, + togetic: { + tier: "UU", + }, + natu: { + tier: "LC", + }, + xatu: { + tier: "UU", + }, + mareep: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + flaaffy: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + ampharos: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + azurill: { + tier: "LC", + }, + marill: { + tier: "NFE", + }, + azumarill: { + tier: "OU", + }, + sudowoodo: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + hoppip: { + tier: "LC", + }, + skiploom: { + tier: "NFE", + }, + jumpluff: { + tier: "OU", + }, + aipom: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + sunkern: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + sunflora: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + yanma: { + tier: "UU", + }, + wooper: { + tier: "LC", + }, + quagsire: { + tier: "OU", + }, + murkrow: { + tier: "UU", + }, + misdreavus: { + tier: "UU", + }, + unown: { + tier: "UU", + }, + wynaut: { + tier: "Uber", + }, + wobbuffet: { + tier: "Uber", + }, + girafarig: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + pineco: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + forretress: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + dunsparce: { + tier: "UU", + }, + gligar: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + snubbull: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + granbull: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + qwilfish: { + tier: "UU", + }, + shuckle: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + heracross: { + tier: "OU", + }, + sneasel: { + tier: "UU", + }, + teddiursa: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + ursaring: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + slugma: { + tier: "LC", + }, + magcargo: { + tier: "UU", + }, + swinub: { + tier: "LC", + }, + piloswine: { + tier: "UU", + }, + corsola: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + remoraid: { + tier: "LC", + }, + octillery: { + tier: "UU", + }, + delibird: { + tier: "UU", + }, + mantine: { + tier: "UU", + }, + skarmory: { + tier: "OU", + }, + houndour: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + houndoom: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + phanpy: { + tier: "LC", + }, + donphan: { + tier: "OU", + }, + stantler: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + smeargle: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + miltank: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + raikou: { + tier: "UU", + }, + entei: { + tier: "UU", + }, + suicune: { + tier: "UU", + }, + larvitar: { + tier: "LC", + }, + pupitar: { + tier: "NFE", + }, + tyranitar: { + tier: "OU", + }, + lugia: { + tier: "Uber", + }, + hooh: { + tier: "Uber", + }, + celebi: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + treecko: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + grovyle: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + sceptile: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + torchic: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + combusken: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + blaziken: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + mudkip: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + marshtomp: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + swampert: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + poochyena: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + mightyena: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + zigzagoon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + linoone: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + wurmple: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + silcoon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + beautifly: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + cascoon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + dustox: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + lotad: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + lombre: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + ludicolo: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + seedot: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + nuzleaf: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + shiftry: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + taillow: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + swellow: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + wingull: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + pelipper: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + ralts: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + kirlia: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + gardevoir: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + surskit: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + masquerain: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + shroomish: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + breloom: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + slakoth: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + vigoroth: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + slaking: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + nincada: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + ninjask: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + shedinja: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + whismur: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + loudred: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + exploud: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + makuhita: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + hariyama: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + nosepass: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + skitty: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + delcatty: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + sableye: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + mawile: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + aron: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + lairon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + aggron: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + meditite: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + medicham: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + electrike: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + manectric: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + plusle: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + minun: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + volbeat: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + illumise: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + roselia: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + gulpin: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + swalot: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + carvanha: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + sharpedo: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + wailmer: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + wailord: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + numel: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + camerupt: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + torkoal: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + spoink: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + grumpig: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + spinda: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + trapinch: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + vibrava: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + flygon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + cacnea: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + cacturne: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + swablu: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + altaria: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + zangoose: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + seviper: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + lunatone: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + solrock: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + barboach: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + whiscash: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + corphish: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + crawdaunt: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + baltoy: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + claydol: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + lileep: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + cradily: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + anorith: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + armaldo: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + feebas: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + milotic: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + castform: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + castformsunny: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + castformrainy: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + castformsnowy: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + kecleon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + shuppet: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + banette: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + duskull: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + dusclops: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + tropius: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + chimecho: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + absol: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + snorunt: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + glalie: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + spheal: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + sealeo: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + walrein: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + clamperl: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + huntail: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + gorebyss: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + relicanth: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + luvdisc: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + bagon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + shelgon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + salamence: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + beldum: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + metang: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + metagross: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + regirock: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + regice: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + registeel: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + latias: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + latios: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + kyogre: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + groudon: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + rayquaza: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + jirachi: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + deoxys: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, + deoxysattack: { + tier: "Uber", + }, + deoxysdefense: { + tier: "Uber", + }, + deoxysspeed: { + tier: "Unreleased", + isNonstandard: "Unobtainable", + }, +}; diff --git a/data/mods/gen3frlg/items.ts b/data/mods/gen3frlg/items.ts new file mode 100644 index 0000000000..02a3138aa6 --- /dev/null +++ b/data/mods/gen3frlg/items.ts @@ -0,0 +1,146 @@ +export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { + aguavberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + apicotberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + brightpowder: { + inherit: true, + isNonstandard: "Unobtainable", + }, + choiceband: { + inherit: true, + isNonstandard: "Unobtainable", + }, + clawfossil: { + inherit: true, + isNonstandard: "Unobtainable", + }, + cornnberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + deepseascale: { + inherit: true, + isNonstandard: "Unobtainable", + }, + deepseatooth: { + inherit: true, + isNonstandard: "Unobtainable", + }, + diveball: { + inherit: true, + isNonstandard: "Unobtainable", + }, + enigmaberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + figyberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + ganlonberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + grepaberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + hondewberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + kelpsyberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + lansatberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + liechiberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + lightball: { + inherit: true, + isNonstandard: "Unobtainable", + }, + magoberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + magostberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + mentalherb: { + inherit: true, + isNonstandard: "Unobtainable", + }, + nomelberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + petayaberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + pomegberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + premierball: { + inherit: true, + isNonstandard: "Unobtainable", + }, + qualotberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + rabutaberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + rootfossil: { + inherit: true, + isNonstandard: "Unobtainable", + }, + salacberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + scopelens: { + inherit: true, + isNonstandard: "Unobtainable", + }, + shellbell: { + inherit: true, + isNonstandard: "Unobtainable", + }, + souldew: { + inherit: true, + isNonstandard: "Unobtainable", + }, + starfberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + tamatoberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, + whiteherb: { + inherit: true, + isNonstandard: "Unobtainable", + }, + wikiberry: { + inherit: true, + isNonstandard: "Unobtainable", + }, +}; diff --git a/data/mods/gen3frlg/learnsets.ts b/data/mods/gen3frlg/learnsets.ts new file mode 100644 index 0000000000..efdd42881e --- /dev/null +++ b/data/mods/gen3frlg/learnsets.ts @@ -0,0 +1,9336 @@ +export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = { + bulbasaur: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + bulletseed: ["3M"], + curse: ["3E"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + growl: ["3L4"], + growth: ["3L32"], + hiddenpower: ["3M"], + leechseed: ["3L7"], + lightscreen: ["3E"], + magicalleaf: ["3E"], + mimic: ["3T"], + petaldance: ["3E"], + poisonpowder: ["3L15"], + protect: ["3M"], + razorleaf: ["3L20"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + safeguard: ["3E"], + secretpower: ["3M"], + skullbash: ["3E"], + sleeppowder: ["3L15"], + sludgebomb: ["3M"], + solarbeam: ["3M", "3L46"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetscent: ["3L25"], + swordsdance: ["3T"], + synthesis: ["3L39"], + tackle: ["3L1"], + toxic: ["3M"], + vinewhip: ["3L10"], + }, + }, + ivysaur: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + bulletseed: ["3M"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + growl: ["3L1"], + growth: ["3L38"], + hiddenpower: ["3M"], + leechseed: ["3L1"], + mimic: ["3T"], + poisonpowder: ["3L15"], + protect: ["3M"], + razorleaf: ["3L22"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + sleeppowder: ["3L15"], + sludgebomb: ["3M"], + solarbeam: ["3M", "3L56"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetscent: ["3L29"], + swordsdance: ["3T"], + synthesis: ["3L47"], + tackle: ["3L1"], + toxic: ["3M"], + vinewhip: ["3L10"], + }, + }, + venusaur: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + bulletseed: ["3M"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + flash: ["3M"], + frenzyplant: ["3T"], + frustration: ["3M"], + gigadrain: ["3M"], + growl: ["3L1"], + growth: ["3L41"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + leechseed: ["3L1"], + mimic: ["3T"], + poisonpowder: ["3L15"], + protect: ["3M"], + razorleaf: ["3L22"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + sleeppowder: ["3L15"], + sludgebomb: ["3M"], + solarbeam: ["3M", "3L65"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetscent: ["3L29"], + swordsdance: ["3T"], + synthesis: ["3L53"], + tackle: ["3L1"], + toxic: ["3M"], + vinewhip: ["3L1"], + }, + }, + charmander: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + beatup: ["3E"], + bellydrum: ["3E"], + bite: ["3E"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragonclaw: ["3M"], + dragondance: ["3E"], + dragonrage: ["3L43"], + ember: ["3L7"], + facade: ["3M"], + fireblast: ["3M"], + firespin: ["3L49"], + flamethrower: ["3M", "3L31"], + focuspunch: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + hiddenpower: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metalclaw: ["3L13"], + mimic: ["3T"], + outrage: ["3E"], + overheat: ["3M"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + scaryface: ["3L25"], + scratch: ["3L1"], + secretpower: ["3M"], + seismictoss: ["3T"], + slash: ["3L37"], + smokescreen: ["3L13"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T", "3E"], + toxic: ["3M"], + }, + }, + charmeleon: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragonclaw: ["3M"], + dragonrage: ["3L48"], + ember: ["3L1"], + facade: ["3M"], + fireblast: ["3M"], + firespin: ["3L55"], + flamethrower: ["3M", "3L34"], + focuspunch: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + hiddenpower: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metalclaw: ["3L13"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + scaryface: ["3L27"], + scratch: ["3L1"], + secretpower: ["3M"], + seismictoss: ["3T"], + slash: ["3L41"], + smokescreen: ["3L13"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + toxic: ["3M"], + }, + }, + charizard: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + blastburn: ["3T"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragonclaw: ["3M"], + dragonrage: ["3L54"], + earthquake: ["3M"], + ember: ["3L1"], + facade: ["3M"], + fireblast: ["3M"], + firespin: ["3L64"], + flamethrower: ["3M", "3L34"], + fly: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + heatwave: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metalclaw: ["3L1"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + scaryface: ["3L27"], + scratch: ["3L1"], + secretpower: ["3M"], + seismictoss: ["3T"], + slash: ["3L44"], + smokescreen: ["3L1"], + steelwing: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + toxic: ["3M"], + wingattack: ["3L36"], + }, + }, + squirtle: { + learnset: { + attract: ["3M"], + bite: ["3L18"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bubble: ["3L7"], + counter: ["3T"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flail: ["3E"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + haze: ["3E"], + hiddenpower: ["3M"], + hydropump: ["3L47"], + icebeam: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mist: ["3E"], + protect: ["3M", "3L28"], + raindance: ["3M", "3L33"], + rapidspin: ["3L23"], + refresh: ["3E"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + skullbash: ["3L40"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + tackle: ["3L1"], + tailwhip: ["3L4"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L13"], + waterpulse: ["3M"], + withdraw: ["3L10"], + yawn: ["3E"], + }, + }, + wartortle: { + learnset: { + attract: ["3M"], + bite: ["3L19"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bubble: ["3L1"], + counter: ["3T"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L53"], + icebeam: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M", "3L31"], + raindance: ["3M", "3L37"], + rapidspin: ["3L25"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + skullbash: ["3L45"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + tackle: ["3L1"], + tailwhip: ["3L1"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L13"], + waterpulse: ["3M"], + withdraw: ["3L10"], + }, + }, + blastoise: { + learnset: { + attract: ["3M"], + bite: ["3L19"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bubble: ["3L1"], + counter: ["3T"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydrocannon: ["3T"], + hydropump: ["3L68"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M", "3L31"], + raindance: ["3M", "3L42"], + rapidspin: ["3L25"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + skullbash: ["3L55"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + tackle: ["3L1"], + tailwhip: ["3L1"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L13"], + waterpulse: ["3M"], + withdraw: ["3L1"], + }, + }, + caterpie: { + learnset: { + stringshot: ["3L1"], + tackle: ["3L1"], + }, + encounters: [ + {generation: 3, level: 3}, + ], + }, + metapod: { + learnset: { + harden: ["3L1"], + }, + encounters: [ + {generation: 3, level: 4}, + ], + }, + butterfree: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + confusion: ["3L1"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + gust: ["3L28"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + mimic: ["3T"], + poisonpowder: ["3L13"], + protect: ["3M"], + psybeam: ["3L34"], + psychic: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M", "3L40"], + secretpower: ["3M"], + shadowball: ["3M"], + silverwind: ["3L47"], + skillswap: ["3M"], + sleeppowder: ["3L15"], + solarbeam: ["3M"], + stunspore: ["3L14"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L18"], + thief: ["3M"], + toxic: ["3M"], + whirlwind: ["3L23"], + }, + }, + weedle: { + learnset: { + poisonsting: ["3L1"], + stringshot: ["3L1"], + }, + encounters: [ + {generation: 3, level: 3}, + ], + }, + kakuna: { + learnset: { + harden: ["3L1"], + }, + encounters: [ + {generation: 3, level: 4}, + ], + }, + beedrill: { + learnset: { + aerialace: ["3M"], + agility: ["3L40"], + attract: ["3M"], + brickbreak: ["3M"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + endeavor: ["3L45"], + facade: ["3M"], + focusenergy: ["3L15"], + frustration: ["3M"], + furyattack: ["3L1"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + mimic: ["3T"], + pinmissile: ["3L35"], + protect: ["3M"], + pursuit: ["3L30"], + rage: ["3L25"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + thief: ["3M"], + toxic: ["3M"], + twineedle: ["3L20"], + }, + }, + pidgey: { + learnset: { + aerialace: ["3M"], + agility: ["3L39"], + aircutter: ["3E"], + attract: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + featherdance: ["3L31"], + feintattack: ["3E"], + fly: ["3M"], + frustration: ["3M"], + gust: ["3L9"], + hiddenpower: ["3M"], + mimic: ["3T"], + mirrormove: ["3L47"], + protect: ["3M"], + pursuit: ["3E"], + quickattack: ["3L13"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + sandattack: ["3L5"], + secretpower: ["3M"], + steelwing: ["3M", "3E"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + thief: ["3M"], + toxic: ["3M"], + whirlwind: ["3L19"], + wingattack: ["3L25"], + }, + encounters: [ + {generation: 3, level: 2}, + ], + }, + pidgeotto: { + learnset: { + aerialace: ["3M"], + agility: ["3L43"], + attract: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + featherdance: ["3L34"], + fly: ["3M"], + frustration: ["3M"], + gust: ["3L1"], + hiddenpower: ["3M"], + mimic: ["3T"], + mirrormove: ["3L52"], + protect: ["3M"], + quickattack: ["3L13"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + sandattack: ["3L1"], + secretpower: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + thief: ["3M"], + toxic: ["3M"], + whirlwind: ["3L20"], + wingattack: ["3L27"], + }, + encounters: [ + {generation: 3, level: 7}, + ], + }, + pidgeot: { + learnset: { + aerialace: ["3M"], + agility: ["3L48"], + attract: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + featherdance: ["3L34"], + fly: ["3M"], + frustration: ["3M"], + gust: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + mimic: ["3T"], + mirrormove: ["3L62"], + protect: ["3M"], + quickattack: ["3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + sandattack: ["3L1"], + secretpower: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + thief: ["3M"], + toxic: ["3M"], + whirlwind: ["3L20"], + wingattack: ["3L27"], + }, + }, + rattata: { + learnset: { + attract: ["3M"], + bite: ["3E"], + blizzard: ["3M"], + bodyslam: ["3T"], + counter: ["3T", "3E"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + endeavor: ["3L41"], + facade: ["3M"], + flamewheel: ["3E"], + focusenergy: ["3L20"], + frustration: ["3M"], + furyswipes: ["3E"], + hiddenpower: ["3M"], + hyperfang: ["3L13"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + pursuit: ["3L27"], + quickattack: ["3L7"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + screech: ["3E"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + superfang: ["3L34"], + swagger: ["3E"], + tackle: ["3L1"], + tailwhip: ["3L1"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 2}, + ], + }, + raticate: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + counter: ["3T"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + endeavor: ["3L50"], + facade: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + hyperfang: ["3L13"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + pursuit: ["3L30"], + quickattack: ["3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + scaryface: ["3L20"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + superfang: ["3L40"], + tackle: ["3L1"], + tailwhip: ["3L1"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + }, + }, + spearow: { + learnset: { + aerialace: ["3M", "3L25"], + agility: ["3L43"], + astonish: ["3E"], + attract: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + drillpeck: ["3L37"], + facade: ["3M"], + falseswipe: ["3E"], + feintattack: ["3E"], + fly: ["3M"], + frustration: ["3M"], + furyattack: ["3L13"], + growl: ["3L1"], + hiddenpower: ["3M"], + leer: ["3L7"], + mimic: ["3T"], + mirrormove: ["3L31"], + peck: ["3L1"], + protect: ["3M"], + pursuit: ["3L19"], + quickattack: ["3E"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + scaryface: ["3E"], + secretpower: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + triattack: ["3E"], + }, + encounters: [ + {generation: 3, level: 3}, + ], + }, + fearow: { + learnset: { + aerialace: ["3M"], + agility: ["3L47"], + attract: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + drillpeck: ["3L40"], + facade: ["3M"], + fly: ["3M"], + frustration: ["3M"], + furyattack: ["3L1"], + growl: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + mirrormove: ["3L32"], + peck: ["3L1"], + protect: ["3M"], + pursuit: ["3L26"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + ekans: { + learnset: { + acid: ["3L32"], + attract: ["3M"], + beatup: ["3E"], + bite: ["3L13"], + bodyslam: ["3T"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + glare: ["3L20"], + haze: ["3L44"], + hiddenpower: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + poisonsting: ["3L8"], + protect: ["3M"], + pursuit: ["3E"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + screech: ["3L25"], + secretpower: ["3M"], + slam: ["3E"], + sludgebomb: ["3M"], + snatch: ["3M"], + spite: ["3E"], + spitup: ["3L37"], + stockpile: ["3L37"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swallow: ["3L37"], + thief: ["3M"], + torment: ["3M"], + toxic: ["3M"], + wrap: ["3L1"], + }, + }, + arbok: { + learnset: { + acid: ["3L38"], + attract: ["3M"], + bite: ["3L1"], + bodyslam: ["3T"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + glare: ["3L20"], + haze: ["3L56"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + poisonsting: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + screech: ["3L28"], + secretpower: ["3M"], + sludgebomb: ["3M"], + snatch: ["3M"], + spitup: ["3L46"], + stockpile: ["3L46"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swallow: ["3L46"], + thief: ["3M"], + torment: ["3M"], + toxic: ["3M"], + wrap: ["3L1"], + }, + }, + pichu: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + charm: ["3L1"], + counter: ["3T"], + doubleedge: ["3T"], + doubleslap: ["3E"], + doubleteam: ["3M"], + encore: ["3E"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + irontail: ["3M"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + present: ["3E"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shockwave: ["3M"], + substitute: ["3T"], + sweetkiss: ["3L11"], + tailwhip: ["3L6"], + thunder: ["3M"], + thunderbolt: ["3M"], + thundershock: ["3L1"], + thunderwave: ["3T", "3L8"], + toxic: ["3M"], + wish: ["3E"], + }, + }, + pikachu: { + learnset: { + agility: ["3L33"], + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M", "3L15"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + hiddenpower: ["3M"], + irontail: ["3M"], + lightscreen: ["3M", "3L50"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + quickattack: ["3L11"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shockwave: ["3M"], + slam: ["3L20"], + strength: ["3M"], + substitute: ["3T"], + tailwhip: ["3L6"], + thunder: ["3M", "3L41"], + thunderbolt: ["3M", "3L26"], + thundershock: ["3L1"], + thunderwave: ["3T", "3L8"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 3}, + ], + }, + raichu: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + quickattack: ["3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shockwave: ["3M"], + strength: ["3M"], + substitute: ["3T"], + tailwhip: ["3L1"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M", "3L1"], + thundershock: ["3L1"], + thunderwave: ["3T"], + toxic: ["3M"], + }, + }, + sandshrew: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T", "3E"], + cut: ["3M"], + defensecurl: ["3T", "3L6"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + flail: ["3E"], + focuspunch: ["3M"], + frustration: ["3M"], + furyswipes: ["3L37"], + hiddenpower: ["3M"], + irontail: ["3M"], + metalclaw: ["3E"], + mimic: ["3T"], + poisonsting: ["3L17"], + protect: ["3M"], + rapidspin: ["3E"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rocktomb: ["3M"], + safeguard: ["3E"], + sandattack: ["3L11"], + sandstorm: ["3M", "3L53"], + sandtomb: ["3L45"], + scratch: ["3L1"], + secretpower: ["3M"], + seismictoss: ["3T"], + slash: ["3L23"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swift: ["3T", "3L30"], + swordsdance: ["3T", "3E"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + sandslash: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + cut: ["3M"], + defensecurl: ["3T", "3L1"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + furyswipes: ["3L42"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + poisonsting: ["3L17"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandattack: ["3L1"], + sandstorm: ["3M", "3L62"], + sandtomb: ["3L52"], + scratch: ["3L1"], + secretpower: ["3M"], + seismictoss: ["3T"], + slash: ["3L24"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swift: ["3T", "3L33"], + swordsdance: ["3T"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + nidoranf: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + beatup: ["3E"], + bite: ["3L20"], + blizzard: ["3M"], + bodyslam: ["3T"], + charm: ["3E"], + counter: ["3T", "3E"], + crunch: ["3L47"], + cut: ["3M"], + dig: ["3M"], + disable: ["3E"], + doubleedge: ["3T"], + doublekick: ["3L12"], + doubleteam: ["3M"], + facade: ["3M"], + flatter: ["3L38"], + focusenergy: ["3E"], + frustration: ["3M"], + furyswipes: ["3L30"], + growl: ["3L1"], + helpinghand: ["3L23"], + hiddenpower: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + poisonsting: ["3L17"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + scratch: ["3L1"], + secretpower: ["3M"], + shockwave: ["3M"], + sludgebomb: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3E"], + tailwhip: ["3L8"], + takedown: ["3E"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + nidorina: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bite: ["3L22"], + blizzard: ["3M"], + bodyslam: ["3T"], + counter: ["3T"], + crunch: ["3L53"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doublekick: ["3L12"], + doubleteam: ["3M"], + facade: ["3M"], + flatter: ["3L43"], + frustration: ["3M"], + furyswipes: ["3L34"], + growl: ["3L1"], + helpinghand: ["3L26"], + hiddenpower: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + poisonsting: ["3L18"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + scratch: ["3L1"], + secretpower: ["3M"], + shockwave: ["3M"], + sludgebomb: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tailwhip: ["3L8"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + nidoqueen: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T", "3L22"], + brickbreak: ["3M"], + counter: ["3T"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doublekick: ["3L1"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + poisonsting: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + scratch: ["3L1"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sludgebomb: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + superpower: ["3L43"], + surf: ["3M"], + tailwhip: ["3L1"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + nidoranm: { + learnset: { + amnesia: ["3E"], + attract: ["3M"], + beatup: ["3E"], + blizzard: ["3M"], + bodyslam: ["3T"], + confusion: ["3E"], + counter: ["3T", "3E"], + cut: ["3M"], + dig: ["3M"], + disable: ["3E"], + doubleedge: ["3T"], + doublekick: ["3L12"], + doubleteam: ["3M"], + facade: ["3M"], + flatter: ["3L38"], + focusenergy: ["3L8"], + frustration: ["3M"], + furyattack: ["3L30"], + helpinghand: ["3L23"], + hiddenpower: ["3M"], + hornattack: ["3L20"], + horndrill: ["3L47"], + icebeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + peck: ["3L1"], + poisonsting: ["3L17"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + shockwave: ["3M"], + sludgebomb: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3E"], + takedown: ["3E"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + nidorino: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + counter: ["3T"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doublekick: ["3L12"], + doubleteam: ["3M"], + facade: ["3M"], + flatter: ["3L43"], + focusenergy: ["3L8"], + frustration: ["3M"], + furyattack: ["3L34"], + helpinghand: ["3L26"], + hiddenpower: ["3M"], + hornattack: ["3L22"], + horndrill: ["3L53"], + icebeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + peck: ["3L1"], + poisonsting: ["3L18"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + shockwave: ["3M"], + sludgebomb: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + nidoking: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doublekick: ["3L1"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focusenergy: ["3L1"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + megahorn: ["3L43"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + peck: ["3L1"], + poisonsting: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sludgebomb: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + taunt: ["3M"], + thief: ["3M"], + thrash: ["3L22"], + thunder: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + cleffa: { + learnset: { + amnesia: ["3E"], + attract: ["3M"], + bellydrum: ["3E"], + bodyslam: ["3T"], + charm: ["3L1"], + counter: ["3T"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + encore: ["3L4"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + irontail: ["3M"], + lightscreen: ["3M"], + magicalleaf: ["3L17"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T", "3E"], + mimic: ["3T", "3E"], + pound: ["3L1"], + present: ["3E"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sing: ["3L8"], + softboiled: ["3T"], + solarbeam: ["3M"], + splash: ["3E"], + substitute: ["3T", "3E"], + sunnyday: ["3M"], + sweetkiss: ["3L13"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + wish: ["3E"], + }, + }, + clefairy: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + cosmicpower: ["3L33"], + counter: ["3T"], + defensecurl: ["3T", "3L25"], + dig: ["3M"], + doubleedge: ["3T"], + doubleslap: ["3L13"], + doubleteam: ["3M"], + dreameater: ["3T"], + encore: ["3L5"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + followme: ["3L17"], + frustration: ["3M"], + growl: ["3L1"], + hiddenpower: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + lightscreen: ["3M", "3L41"], + megakick: ["3T"], + megapunch: ["3T"], + meteormash: ["3L45"], + metronome: ["3T", "3L29"], + mimic: ["3T"], + minimize: ["3L21"], + moonlight: ["3L37"], + pound: ["3L1"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sing: ["3L9"], + snatch: ["3M"], + softboiled: ["3T"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + clefable: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + counter: ["3T"], + dig: ["3M"], + doubleedge: ["3T"], + doubleslap: ["3L1"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T", "3L1"], + mimic: ["3T"], + minimize: ["3L1"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sing: ["3L1"], + snatch: ["3M"], + softboiled: ["3T"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + vulpix: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + confuseray: ["3L21"], + dig: ["3M"], + disable: ["3E"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L1"], + facade: ["3M"], + feintattack: ["3E"], + fireblast: ["3M"], + firespin: ["3L41"], + flail: ["3E"], + flamethrower: ["3M", "3L29"], + frustration: ["3M"], + grudge: ["3L37"], + hiddenpower: ["3M"], + hypnosis: ["3E"], + imprison: ["3L25"], + irontail: ["3M"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + psychup: ["3E"], + quickattack: ["3L13"], + rest: ["3M"], + return: ["3M"], + roar: ["3M", "3L9"], + safeguard: ["3M", "3L33"], + secretpower: ["3M"], + spite: ["3E"], + substitute: ["3T"], + sunnyday: ["3M"], + tailwhip: ["3L5"], + toxic: ["3M"], + willowisp: ["3L17"], + }, + }, + ninetales: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + confuseray: ["3L1"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L1"], + facade: ["3M"], + fireblast: ["3M"], + firespin: ["3L45"], + flamethrower: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + quickattack: ["3L1"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + safeguard: ["3M", "3L1"], + secretpower: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + toxic: ["3M"], + }, + }, + igglybuff: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + charm: ["3L1"], + counter: ["3T"], + defensecurl: ["3T", "3L4"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + perishsong: ["3E"], + pound: ["3L9"], + present: ["3E"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sing: ["3L1"], + solarbeam: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetkiss: ["3L14"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + wish: ["3E"], + }, + }, + jigglypuff: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T", "3L34"], + brickbreak: ["3M"], + counter: ["3T"], + defensecurl: ["3T", "3L4"], + dig: ["3M"], + disable: ["3L14"], + doubleedge: ["3T", "3L49"], + doubleslap: ["3L24"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hypervoice: ["3L44"], + icebeam: ["3M"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T", "3L39"], + pound: ["3L9"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M", "3L29"], + return: ["3M"], + rollout: ["3T", "3L19"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sing: ["3L1"], + snatch: ["3M"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + encounters: [ + {generation: 3, level: 3}, + ], + }, + wigglytuff: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + defensecurl: ["3T", "3L1"], + dig: ["3M"], + disable: ["3L1"], + doubleedge: ["3T"], + doubleslap: ["3L1"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sing: ["3L1"], + snatch: ["3M"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + zubat: { + learnset: { + aerialace: ["3M"], + aircutter: ["3L31"], + astonish: ["3L6"], + attract: ["3M"], + bite: ["3L16"], + confuseray: ["3L26"], + curse: ["3E"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + feintattack: ["3E"], + frustration: ["3M"], + gigadrain: ["3M"], + gust: ["3E"], + haze: ["3L46"], + hiddenpower: ["3M"], + leechlife: ["3L1"], + meanlook: ["3L36"], + mimic: ["3T"], + poisonfang: ["3L41"], + protect: ["3M"], + pursuit: ["3E"], + quickattack: ["3E"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + shadowball: ["3M"], + sludgebomb: ["3M"], + snatch: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L6"], + taunt: ["3M"], + thief: ["3M"], + torment: ["3M"], + toxic: ["3M"], + whirlwind: ["3E"], + wingattack: ["3L21"], + }, + }, + golbat: { + learnset: { + aerialace: ["3M"], + aircutter: ["3L35"], + astonish: ["3L1"], + attract: ["3M"], + bite: ["3L16"], + confuseray: ["3L28"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + haze: ["3L56"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + leechlife: ["3L1"], + meanlook: ["3L42"], + mimic: ["3T"], + poisonfang: ["3L49"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + screech: ["3L1"], + secretpower: ["3M"], + shadowball: ["3M"], + sludgebomb: ["3M"], + snatch: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L1"], + taunt: ["3M"], + thief: ["3M"], + torment: ["3M"], + toxic: ["3M"], + wingattack: ["3L21"], + }, + encounters: [ + {generation: 3, level: 5}, + ], + }, + crobat: { + learnset: { + aerialace: ["3M"], + aircutter: ["3L35"], + astonish: ["3L1"], + attract: ["3M"], + bite: ["3L16"], + confuseray: ["3L28"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + fly: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + haze: ["3L56"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + leechlife: ["3L1"], + meanlook: ["3L42"], + mimic: ["3T"], + poisonfang: ["3L49"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + screech: ["3L1"], + secretpower: ["3M"], + shadowball: ["3M"], + sludgebomb: ["3M"], + snatch: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L1"], + taunt: ["3M"], + thief: ["3M"], + torment: ["3M"], + toxic: ["3M"], + wingattack: ["3L21"], + }, + }, + oddish: { + learnset: { + absorb: ["3L1"], + acid: ["3L23"], + attract: ["3M"], + bulletseed: ["3M"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + ingrain: ["3E"], + mimic: ["3T"], + moonlight: ["3L32"], + petaldance: ["3L39"], + poisonpowder: ["3L14"], + protect: ["3M"], + razorleaf: ["3E"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + sleeppowder: ["3L18"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + stunspore: ["3L16"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetscent: ["3L7"], + swordsdance: ["3T", "3E"], + synthesis: ["3E"], + toxic: ["3M"], + }, + }, + gloom: { + learnset: { + absorb: ["3L1"], + acid: ["3L24"], + attract: ["3M"], + bulletseed: ["3M"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + mimic: ["3T"], + moonlight: ["3L35"], + petaldance: ["3L44"], + poisonpowder: ["3L1"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + sleeppowder: ["3L18"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + stunspore: ["3L16"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetscent: ["3L1"], + swordsdance: ["3T"], + toxic: ["3M"], + }, + }, + vileplume: { + learnset: { + absorb: ["3L1"], + aromatherapy: ["3L1"], + attract: ["3M"], + bodyslam: ["3T"], + bulletseed: ["3M"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + megadrain: ["3L1"], + mimic: ["3T"], + petaldance: ["3L44"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + stunspore: ["3L1"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + toxic: ["3M"], + }, + }, + bellossom: { + learnset: { + absorb: ["3L1"], + attract: ["3M"], + bulletseed: ["3M"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + magicalleaf: ["3L1"], + mimic: ["3T"], + petaldance: ["3L44"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + sludgebomb: ["3M"], + solarbeam: ["3M", "3L55"], + stunspore: ["3L1"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetscent: ["3L1"], + swordsdance: ["3T"], + toxic: ["3M"], + }, + }, + paras: { + learnset: { + aerialace: ["3M"], + aromatherapy: ["3L49"], + attract: ["3M"], + bodyslam: ["3T"], + bulletseed: ["3M"], + counter: ["3T", "3E"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + falseswipe: ["3E"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M", "3L43"], + growth: ["3L37"], + hiddenpower: ["3M"], + leechlife: ["3L19"], + lightscreen: ["3E"], + mimic: ["3T"], + poisonpowder: ["3L13"], + protect: ["3M"], + psybeam: ["3E"], + pursuit: ["3E"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + scratch: ["3L1"], + screech: ["3E"], + secretpower: ["3M"], + slash: ["3L31"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + spore: ["3L25"], + stunspore: ["3L7"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetscent: ["3E"], + swordsdance: ["3T"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + parasect: { + learnset: { + aerialace: ["3M"], + aromatherapy: ["3L59"], + attract: ["3M"], + bodyslam: ["3T"], + bulletseed: ["3M"], + counter: ["3T"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M", "3L51"], + growth: ["3L43"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + leechlife: ["3L19"], + mimic: ["3T"], + poisonpowder: ["3L1"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + scratch: ["3L1"], + secretpower: ["3M"], + slash: ["3L35"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + spore: ["3L27"], + stunspore: ["3L1"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + venonat: { + learnset: { + attract: ["3M"], + batonpass: ["3E"], + confusion: ["3L17"], + disable: ["3L1"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + foresight: ["3L1"], + frustration: ["3M"], + gigadrain: ["3M", "3E"], + hiddenpower: ["3M"], + leechlife: ["3L25"], + mimic: ["3T"], + poisonpowder: ["3L20"], + protect: ["3M"], + psybeam: ["3L33"], + psychic: ["3M", "3L41"], + rest: ["3M"], + return: ["3M"], + screech: ["3E"], + secretpower: ["3M"], + skillswap: ["3M"], + sleeppowder: ["3L36"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + stunspore: ["3L28"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L9"], + tackle: ["3L1"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + venomoth: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + confusion: ["3L17"], + disable: ["3L1"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + foresight: ["3L1"], + frustration: ["3M"], + gigadrain: ["3M"], + gust: ["3L31"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + leechlife: ["3L25"], + mimic: ["3T"], + poisonpowder: ["3L20"], + protect: ["3M"], + psybeam: ["3L36"], + psychic: ["3M", "3L52"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + silverwind: ["3L1"], + skillswap: ["3M"], + sleeppowder: ["3L42"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + stunspore: ["3L28"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L1"], + tackle: ["3L1"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + diglett: { + learnset: { + aerialace: ["3M"], + ancientpower: ["3E"], + attract: ["3M"], + beatup: ["3E"], + bodyslam: ["3T"], + cut: ["3M"], + dig: ["3M", "3L17"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M", "3L41"], + facade: ["3M"], + feintattack: ["3E"], + fissure: ["3L49"], + frustration: ["3M"], + furyswipes: ["3L21"], + growl: ["3L5"], + hiddenpower: ["3M"], + magnitude: ["3L9"], + mimic: ["3T"], + mudslap: ["3T", "3L25"], + protect: ["3M"], + pursuit: ["3E"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandattack: ["3L1"], + scratch: ["3L1"], + screech: ["3E"], + secretpower: ["3M"], + slash: ["3L33"], + sludgebomb: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + dugtrio: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bodyslam: ["3T"], + cut: ["3M"], + dig: ["3M", "3L17"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M", "3L51"], + facade: ["3M"], + fissure: ["3L64"], + frustration: ["3M"], + furyswipes: ["3L21"], + growl: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + magnitude: ["3L9"], + mimic: ["3T"], + mudslap: ["3T", "3L25"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandattack: ["3L1"], + sandtomb: ["3L26"], + scratch: ["3L1"], + secretpower: ["3M"], + slash: ["3L38"], + sludgebomb: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + triattack: ["3L1"], + }, + }, + meowth: { + learnset: { + aerialace: ["3M"], + amnesia: ["3E"], + attract: ["3M"], + bite: ["3L10"], + bodyslam: ["3T"], + charm: ["3E"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + fakeout: ["3L43"], + feintattack: ["3L25"], + flash: ["3M"], + frustration: ["3M"], + furyswipes: ["3L36"], + growl: ["3L1"], + hiddenpower: ["3M"], + hypnosis: ["3E"], + irontail: ["3M"], + mimic: ["3T"], + payday: ["3L18"], + protect: ["3M"], + psychup: ["3T", "3E"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + scratch: ["3L1"], + screech: ["3L31"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + slash: ["3L40"], + snatch: ["3M"], + spite: ["3E"], + substitute: ["3T"], + sunnyday: ["3M"], + swagger: ["3T", "3L45"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + encounters: [ + {generation: 3, level: 3, gender: "M", nature: "Naive", ivs: {hp: 4, atk: 5, def: 4, spa: 5, spd: 4, spe: 4}, abilities: ["pickup"], pokeball: "pokeball"}, + ], + }, + persian: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bite: ["3L1"], + bodyslam: ["3T"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + fakeout: ["3L55"], + feintattack: ["3L25"], + flash: ["3M"], + frustration: ["3M"], + furyswipes: ["3L42"], + growl: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + payday: ["3L18"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + scratch: ["3L1"], + screech: ["3L34"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + slash: ["3L49"], + snatch: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swagger: ["3T", "3L61"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + psyduck: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + confusion: ["3L16"], + counter: ["3T"], + crosschop: ["3E"], + dig: ["3M"], + disable: ["3L10"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + furyswipes: ["3L40"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L50"], + hypnosis: ["3E"], + icebeam: ["3M"], + irontail: ["3M"], + lightscreen: ["3E"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psybeam: ["3E"], + psychic: ["3E"], + psychup: ["3T", "3L31"], + raindance: ["3M"], + refresh: ["3E"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + scratch: ["3L1"], + screech: ["3L23"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + tailwhip: ["3L5"], + toxic: ["3M"], + waterfall: ["3M"], + waterpulse: ["3M"], + watersport: ["3L1"], + }, + }, + golduck: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + confusion: ["3L16"], + counter: ["3T"], + dig: ["3M"], + disable: ["3L1"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + furyswipes: ["3L44"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L58"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psychup: ["3T", "3L31"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + scratch: ["3L1"], + screech: ["3L23"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + tailwhip: ["3L1"], + toxic: ["3M"], + waterfall: ["3M"], + waterpulse: ["3M"], + watersport: ["3L1"], + }, + encounters: [ + {generation: 3, level: 25, pokeball: "safariball"}, + ], + }, + mankey: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + beatup: ["3E"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bulkup: ["3M"], + counter: ["3T", "3E"], + crosschop: ["3L31"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + focusenergy: ["3L21"], + focuspunch: ["3M"], + frustration: ["3M"], + furyswipes: ["3L16"], + hiddenpower: ["3M"], + irontail: ["3M"], + karatechop: ["3L11"], + leer: ["3L1"], + lowkick: ["3L6"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rocktomb: ["3M"], + scratch: ["3L1"], + screech: ["3L41"], + secretpower: ["3M"], + seismictoss: ["3T", "3L26"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swagger: ["3T", "3L36"], + taunt: ["3M"], + thief: ["3M"], + thrash: ["3L46"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 2}, + ], + }, + primeape: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bulkup: ["3M"], + counter: ["3T"], + crosschop: ["3L35"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + focusenergy: ["3L21"], + focuspunch: ["3M"], + frustration: ["3M"], + furyswipes: ["3L16"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + karatechop: ["3L11"], + leer: ["3L1"], + lowkick: ["3L1"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + rage: ["3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + scratch: ["3L1"], + screech: ["3L53"], + secretpower: ["3M"], + seismictoss: ["3T", "3L26"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swagger: ["3T", "3L44"], + taunt: ["3M"], + thief: ["3M"], + thrash: ["3L62"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + }, + }, + growlithe: { + learnset: { + aerialace: ["3M"], + agility: ["3L43"], + attract: ["3M"], + bite: ["3L1"], + bodyslam: ["3T", "3E"], + crunch: ["3E"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L7"], + facade: ["3M"], + fireblast: ["3M"], + firespin: ["3E"], + flamethrower: ["3M", "3L49"], + flamewheel: ["3L31"], + frustration: ["3M"], + helpinghand: ["3L37"], + hiddenpower: ["3M"], + irontail: ["3M"], + leer: ["3L13"], + mimic: ["3T"], + odorsleuth: ["3L19"], + overheat: ["3M"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M", "3L1"], + rocksmash: ["3M"], + safeguard: ["3E"], + secretpower: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + takedown: ["3L25"], + thief: ["3M"], + thrash: ["3E"], + toxic: ["3M"], + }, + }, + arcanine: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bite: ["3L1"], + bodyslam: ["3T"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L1"], + extremespeed: ["3L49"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + odorsleuth: ["3L1"], + overheat: ["3M"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M", "3L1"], + rocksmash: ["3M"], + secretpower: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + poliwag: { + learnset: { + attract: ["3M"], + bellydrum: ["3L37"], + blizzard: ["3M"], + bodyslam: ["3T", "3L31"], + bubble: ["3L1"], + bubblebeam: ["3E"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleslap: ["3L19"], + doubleteam: ["3M"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + haze: ["3E"], + hiddenpower: ["3M"], + hydropump: ["3L43"], + hypnosis: ["3L7"], + icebeam: ["3M"], + mimic: ["3T"], + mindreader: ["3E"], + mist: ["3E"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M", "3L25"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + splash: ["3E"], + substitute: ["3T"], + surf: ["3M"], + thief: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L13"], + waterpulse: ["3M"], + watersport: ["3E"], + }, + }, + poliwhirl: { + learnset: { + attract: ["3M"], + bellydrum: ["3L43"], + blizzard: ["3M"], + bodyslam: ["3T", "3L35"], + brickbreak: ["3M"], + bubble: ["3L1"], + counter: ["3T"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleslap: ["3L19"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L51"], + hypnosis: ["3L1"], + icebeam: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M", "3L27"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + thief: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + }, + encounters: [ + {generation: 3, level: 20}, + ], + }, + poliwrath: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bulkup: ["3M"], + counter: ["3T"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleslap: ["3L1"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + hypnosis: ["3L1"], + icebeam: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mindreader: ["3L51"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + submission: ["3L1"], + substitute: ["3T"], + surf: ["3M"], + thief: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + }, + }, + politoed: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleslap: ["3L1"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + hypnosis: ["3L1"], + icebeam: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + perishsong: ["3L1"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + swagger: ["3T", "3L51"], + thief: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + }, + }, + abra: { + learnset: { + attract: ["3M"], + barrier: ["3E"], + bodyslam: ["3T"], + calmmind: ["3M"], + counter: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + encore: ["3E"], + facade: ["3M"], + firepunch: ["3T", "3E"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + icepunch: ["3T", "3E"], + irontail: ["3M"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + skillswap: ["3M"], + snatch: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + teleport: ["3L1"], + thief: ["3M"], + thunderpunch: ["3T", "3E"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + kadabra: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + calmmind: ["3M"], + confusion: ["3L1"], + counter: ["3T"], + disable: ["3L18"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + futuresight: ["3L30"], + hiddenpower: ["3M"], + irontail: ["3M"], + kinesis: ["3L1"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psybeam: ["3L21"], + psychic: ["3M", "3L36"], + raindance: ["3M"], + recover: ["3L25"], + reflect: ["3M", "3L23"], + rest: ["3M"], + return: ["3M"], + roleplay: ["3L33"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + skillswap: ["3M"], + snatch: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + teleport: ["3L1"], + thief: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + trick: ["3L43"], + }, + }, + alakazam: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + calmmind: ["3M", "3L33"], + confusion: ["3L1"], + counter: ["3T"], + disable: ["3L18"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + futuresight: ["3L30"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + kinesis: ["3L1"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psybeam: ["3L21"], + psychic: ["3M", "3L36"], + raindance: ["3M"], + recover: ["3L25"], + reflect: ["3M", "3L23"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + skillswap: ["3M"], + snatch: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + teleport: ["3L1"], + thief: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + trick: ["3L43"], + }, + }, + machop: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bulkup: ["3M"], + counter: ["3T", "3E"], + crosschop: ["3L40"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dynamicpunch: ["3T", "3L49"], + earthquake: ["3M"], + encore: ["3E"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focusenergy: ["3L7"], + focuspunch: ["3M"], + foresight: ["3L22"], + frustration: ["3M"], + hiddenpower: ["3M"], + karatechop: ["3L13"], + leer: ["3L1"], + lightscreen: ["3E"], + lowkick: ["3L1"], + meditate: ["3E"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + revenge: ["3L25"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rocktomb: ["3M"], + rollingkick: ["3E"], + scaryface: ["3L43"], + secretpower: ["3M"], + seismictoss: ["3T", "3L19"], + strength: ["3M"], + submission: ["3L37"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + vitalthrow: ["3L31"], + }, + }, + machoke: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bulkup: ["3M"], + counter: ["3T"], + crosschop: ["3L46"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dynamicpunch: ["3T", "3L59"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focusenergy: ["3L1"], + focuspunch: ["3M"], + foresight: ["3L22"], + frustration: ["3M"], + hiddenpower: ["3M"], + karatechop: ["3L13"], + leer: ["3L1"], + lowkick: ["3L1"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + revenge: ["3L25"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + scaryface: ["3L51"], + secretpower: ["3M"], + seismictoss: ["3T", "3L19"], + strength: ["3M"], + submission: ["3L41"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + vitalthrow: ["3L33"], + }, + }, + machamp: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bulkup: ["3M"], + counter: ["3T"], + crosschop: ["3L46"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dynamicpunch: ["3T", "3L59"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focusenergy: ["3L1"], + focuspunch: ["3M"], + foresight: ["3L22"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + karatechop: ["3L13"], + leer: ["3L1"], + lowkick: ["3L1"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + revenge: ["3L25"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + scaryface: ["3L51"], + secretpower: ["3M"], + seismictoss: ["3T", "3L19"], + strength: ["3M"], + submission: ["3L41"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + vitalthrow: ["3L33"], + }, + }, + bellsprout: { + learnset: { + acid: ["3L23"], + attract: ["3M"], + bulletseed: ["3M"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + encore: ["3E"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + growth: ["3L6"], + hiddenpower: ["3M"], + ingrain: ["3E"], + leechlife: ["3E"], + magicalleaf: ["3E"], + mimic: ["3T"], + poisonpowder: ["3L17"], + protect: ["3M"], + razorleaf: ["3L37"], + reflect: ["3E"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + slam: ["3L45"], + sleeppowder: ["3L15"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + stunspore: ["3L19"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetscent: ["3L30"], + swordsdance: ["3T", "3E"], + synthesis: ["3E"], + thief: ["3M"], + toxic: ["3M"], + vinewhip: ["3L1"], + wrap: ["3L11"], + }, + }, + weepinbell: { + learnset: { + acid: ["3L24"], + attract: ["3M"], + bulletseed: ["3M"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + growth: ["3L1"], + hiddenpower: ["3M"], + mimic: ["3T"], + poisonpowder: ["3L17"], + protect: ["3M"], + razorleaf: ["3L42"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + slam: ["3L54"], + sleeppowder: ["3L15"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + stunspore: ["3L19"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetscent: ["3L33"], + swordsdance: ["3T"], + thief: ["3M"], + toxic: ["3M"], + vinewhip: ["3L1"], + wrap: ["3L1"], + }, + }, + victreebel: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + bulletseed: ["3M"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + mimic: ["3T"], + protect: ["3M"], + razorleaf: ["3L1"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + sleeppowder: ["3L1"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + spitup: ["3L1"], + stockpile: ["3L1"], + substitute: ["3T"], + sunnyday: ["3M"], + swallow: ["3L1"], + sweetscent: ["3L1"], + swordsdance: ["3T"], + thief: ["3M"], + toxic: ["3M"], + vinewhip: ["3L1"], + }, + }, + tentacool: { + learnset: { + acid: ["3L19"], + attract: ["3M"], + aurorabeam: ["3E"], + barrier: ["3L36"], + blizzard: ["3M"], + bubblebeam: ["3L25"], + confuseray: ["3E"], + constrict: ["3L12"], + cut: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hail: ["3M"], + haze: ["3E"], + hiddenpower: ["3M"], + hydropump: ["3L49"], + icebeam: ["3M"], + mimic: ["3T"], + poisonsting: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rapidspin: ["3E"], + rest: ["3M"], + return: ["3M"], + screech: ["3L43"], + secretpower: ["3M"], + sludgebomb: ["3M"], + substitute: ["3T"], + supersonic: ["3L6"], + surf: ["3M"], + swordsdance: ["3T"], + thief: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + waterpulse: ["3M"], + wrap: ["3L30"], + }, + }, + tentacruel: { + learnset: { + acid: ["3L19"], + attract: ["3M"], + barrier: ["3L38"], + blizzard: ["3M"], + bubblebeam: ["3L25"], + constrict: ["3L1"], + cut: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L55"], + hyperbeam: ["3M"], + icebeam: ["3M"], + mimic: ["3T"], + poisonsting: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + screech: ["3L47"], + secretpower: ["3M"], + sludgebomb: ["3M"], + substitute: ["3T"], + supersonic: ["3L1"], + surf: ["3M"], + swordsdance: ["3T"], + thief: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + waterpulse: ["3M"], + wrap: ["3L30"], + }, + encounters: [ + {generation: 3, level: 20}, + ], + }, + geodude: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + defensecurl: ["3T", "3L1"], + dig: ["3M"], + doubleedge: ["3T", "3L46"], + doubleteam: ["3M"], + earthquake: ["3M", "3L36"], + explosion: ["3T", "3L41"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + magnitude: ["3L16"], + megapunch: ["3T", "3E"], + metronome: ["3T"], + mimic: ["3T"], + mudsport: ["3L6"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + rockblast: ["3L31"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rockthrow: ["3L11"], + rocktomb: ["3M"], + rollout: ["3T", "3L26"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + selfdestruct: ["3T", "3L21"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + toxic: ["3M"], + }, + }, + graveler: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + defensecurl: ["3T", "3L1"], + dig: ["3M"], + doubleedge: ["3T", "3L62"], + doubleteam: ["3M"], + earthquake: ["3M", "3L45"], + explosion: ["3T", "3L53"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + magnitude: ["3L16"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudsport: ["3L1"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + rockblast: ["3L37"], + rockslide: ["3T"], + rocksmash: ["3M"], + rockthrow: ["3L1"], + rocktomb: ["3M"], + rollout: ["3T", "3L29"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + selfdestruct: ["3T", "3L21"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + toxic: ["3M"], + }, + }, + golem: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + defensecurl: ["3T", "3L1"], + dig: ["3M"], + doubleedge: ["3T", "3L62"], + doubleteam: ["3M"], + earthquake: ["3M", "3L45"], + explosion: ["3T", "3L53"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + magnitude: ["3L16"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudsport: ["3L1"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockblast: ["3L37"], + rockslide: ["3T"], + rocksmash: ["3M"], + rockthrow: ["3L1"], + rocktomb: ["3M"], + rollout: ["3T", "3L29"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + selfdestruct: ["3T", "3L21"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + toxic: ["3M"], + }, + }, + ponyta: { + learnset: { + agility: ["3L38"], + attract: ["3M"], + bodyslam: ["3T"], + bounce: ["3L45"], + charm: ["3E"], + doubleedge: ["3T", "3E"], + doublekick: ["3E"], + doubleteam: ["3M"], + ember: ["3L14"], + facade: ["3M"], + fireblast: ["3M", "3L53"], + firespin: ["3L25"], + flamethrower: ["3M"], + flamewheel: ["3E"], + frustration: ["3M"], + growl: ["3L5"], + hiddenpower: ["3M"], + hypnosis: ["3E"], + irontail: ["3M"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + quickattack: ["3L1"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + solarbeam: ["3M"], + stomp: ["3L19"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tailwhip: ["3L9"], + takedown: ["3L31"], + thrash: ["3E"], + toxic: ["3M"], + }, + }, + rapidash: { + learnset: { + agility: ["3L38"], + attract: ["3M"], + bodyslam: ["3T"], + bounce: ["3L50"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L1"], + facade: ["3M"], + fireblast: ["3M", "3L63"], + firespin: ["3L25"], + flamethrower: ["3M"], + frustration: ["3M"], + furyattack: ["3L40"], + growl: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + quickattack: ["3L1"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + solarbeam: ["3M"], + stomp: ["3L19"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tailwhip: ["3L1"], + takedown: ["3L31"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 37}, + ], + }, + slowpoke: { + learnset: { + amnesia: ["3L36"], + attract: ["3M"], + bellydrum: ["3E"], + blizzard: ["3M"], + bodyslam: ["3T"], + calmmind: ["3M"], + confusion: ["3L17"], + curse: ["3L1"], + dig: ["3M"], + disable: ["3L24"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + frustration: ["3M"], + growl: ["3L6"], + hail: ["3M"], + headbutt: ["3L29"], + hiddenpower: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M", "3L40"], + psychup: ["3T", "3L47"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M", "3E"], + secretpower: ["3M"], + shadowball: ["3M"], + skillswap: ["3M"], + sleeptalk: ["3T", "3E"], + snore: ["3T", "3E"], + stomp: ["3E"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + tackle: ["3L1"], + thunderwave: ["3T"], + toxic: ["3M"], + watergun: ["3L13"], + waterpulse: ["3M"], + yawn: ["3L1"], + }, + }, + slowbro: { + learnset: { + amnesia: ["3L36"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + confusion: ["3L17"], + counter: ["3T"], + curse: ["3L1"], + dig: ["3M"], + disable: ["3L24"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + hail: ["3M"], + headbutt: ["3L29"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M", "3L44"], + psychup: ["3T", "3L55"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + skillswap: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + tackle: ["3L1"], + thunderwave: ["3T"], + toxic: ["3M"], + watergun: ["3L13"], + waterpulse: ["3M"], + withdraw: ["3L37"], + yawn: ["3L1"], + }, + encounters: [ + {generation: 3, level: 32}, + ], + }, + slowking: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + confusion: ["3L17"], + counter: ["3T"], + curse: ["3L1"], + dig: ["3M"], + disable: ["3L24"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + growl: ["3L6"], + hail: ["3M"], + headbutt: ["3L29"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M", "3L40"], + psychup: ["3T", "3L47"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + skillswap: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + swagger: ["3T", "3L36"], + tackle: ["3L1"], + thunderwave: ["3T"], + toxic: ["3M"], + watergun: ["3L13"], + waterpulse: ["3M"], + yawn: ["3L1"], + }, + }, + magnemite: { + learnset: { + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + lockon: ["3L32"], + metalsound: ["3L1"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + screech: ["3L44"], + secretpower: ["3M"], + shockwave: ["3M"], + sonicboom: ["3L16"], + spark: ["3L26"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L11"], + swift: ["3T", "3L38"], + tackle: ["3L1"], + thunder: ["3M"], + thunderbolt: ["3M"], + thundershock: ["3L6"], + thunderwave: ["3T", "3L21"], + toxic: ["3M"], + zapcannon: ["3L50"], + }, + }, + magneton: { + learnset: { + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + lockon: ["3L35"], + metalsound: ["3L1"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + screech: ["3L53"], + secretpower: ["3M"], + shockwave: ["3M"], + sonicboom: ["3L16"], + spark: ["3L26"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L1"], + tackle: ["3L1"], + thunder: ["3M"], + thunderbolt: ["3M"], + thundershock: ["3L1"], + thunderwave: ["3T", "3L21"], + toxic: ["3M"], + triattack: ["3L44"], + zapcannon: ["3L62"], + }, + encounters: [ + {generation: 3, level: 26}, + ], + }, + farfetchd: { + learnset: { + aerialace: ["3M"], + agility: ["3L36"], + attract: ["3M"], + bodyslam: ["3T"], + curse: ["3E"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + falseswipe: ["3L46"], + featherdance: ["3E"], + flail: ["3E"], + fly: ["3M"], + frustration: ["3M"], + furyattack: ["3L16"], + furycutter: ["3L26"], + gust: ["3E"], + hiddenpower: ["3M"], + irontail: ["3M"], + knockoff: ["3L21"], + leer: ["3L11"], + mimic: ["3T"], + mirrormove: ["3E"], + peck: ["3L1"], + protect: ["3M"], + quickattack: ["3E"], + rest: ["3M"], + return: ["3M"], + sandattack: ["3L6"], + secretpower: ["3M"], + slash: ["3L41"], + steelwing: ["3M", "3E"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T", "3L31"], + thief: ["3M"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 3, gender: "M", nature: "Adamant", ivs: {hp: 20, atk: 25, def: 21, spa: 24, spd: 15, spe: 20}, abilities: ["keeneye"], pokeball: "pokeball"}, + ], + }, + doduo: { + learnset: { + aerialace: ["3M"], + agility: ["3L45"], + attract: ["3M"], + bodyslam: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + drillpeck: ["3L37"], + facade: ["3M"], + feintattack: ["3E"], + flail: ["3E"], + fly: ["3M"], + frustration: ["3M"], + furyattack: ["3L13"], + growl: ["3L1"], + haze: ["3E"], + hiddenpower: ["3M"], + mimic: ["3T"], + peck: ["3L1"], + protect: ["3M"], + pursuit: ["3L9"], + quickattack: ["3E"], + rage: ["3L25"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3E"], + thief: ["3M"], + toxic: ["3M"], + triattack: ["3L21"], + uproar: ["3L33"], + }, + }, + dodrio: { + learnset: { + aerialace: ["3M"], + agility: ["3L60"], + attract: ["3M"], + bodyslam: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + drillpeck: ["3L47"], + facade: ["3M"], + fly: ["3M"], + frustration: ["3M"], + furyattack: ["3L1"], + growl: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + mimic: ["3T"], + peck: ["3L1"], + protect: ["3M"], + pursuit: ["3L1"], + rage: ["3L25"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + thief: ["3M"], + torment: ["3M"], + toxic: ["3M"], + triattack: ["3L21"], + uproar: ["3L38"], + }, + encounters: [ + {generation: 3, level: 29, pokeball: "safariball"}, + ], + }, + seel: { + learnset: { + attract: ["3M"], + aurorabeam: ["3L21"], + blizzard: ["3M"], + bodyslam: ["3T"], + disable: ["3E"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + encore: ["3E"], + facade: ["3M"], + fakeout: ["3E"], + frustration: ["3M"], + growl: ["3L9"], + hail: ["3M"], + headbutt: ["3L1"], + hiddenpower: ["3M"], + horndrill: ["3E"], + icebeam: ["3M", "3L41"], + icywind: ["3T", "3L17"], + mimic: ["3T"], + perishsong: ["3E"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M", "3L29"], + return: ["3M"], + safeguard: ["3M", "3L49"], + secretpower: ["3M"], + slam: ["3E"], + substitute: ["3T"], + surf: ["3M"], + takedown: ["3L37"], + thief: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + waterpulse: ["3M"], + }, + }, + dewgong: { + learnset: { + attract: ["3M"], + aurorabeam: ["3L1"], + blizzard: ["3M"], + bodyslam: ["3T"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + hail: ["3M"], + headbutt: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M", "3L51"], + icywind: ["3T", "3L1"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M", "3L29"], + return: ["3M"], + safeguard: ["3M", "3L64"], + secretpower: ["3M"], + sheercold: ["3L34"], + signalbeam: ["3L1"], + substitute: ["3T"], + surf: ["3M"], + takedown: ["3L42"], + thief: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + waterpulse: ["3M"], + }, + encounters: [ + {generation: 3, level: 32}, + ], + }, + grimer: { + learnset: { + acidarmor: ["3L34"], + attract: ["3M"], + bodyslam: ["3T"], + curse: ["3E"], + dig: ["3M"], + disable: ["3L8"], + doubleteam: ["3M"], + explosion: ["3T", "3E"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + harden: ["3L4"], + haze: ["3E"], + hiddenpower: ["3M"], + lick: ["3E"], + meanlook: ["3E"], + memento: ["3L53"], + mimic: ["3T"], + minimize: ["3L19"], + poisongas: ["3L1"], + pound: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocktomb: ["3M"], + screech: ["3L26"], + secretpower: ["3M"], + shadowpunch: ["3E"], + shockwave: ["3M"], + sludge: ["3L13"], + sludgebomb: ["3M", "3L43"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + muk: { + learnset: { + acidarmor: ["3L34"], + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + dig: ["3M"], + disable: ["3L8"], + doubleteam: ["3M"], + explosion: ["3T"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + harden: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + memento: ["3L61"], + mimic: ["3T"], + minimize: ["3L19"], + poisongas: ["3L1"], + pound: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + screech: ["3L26"], + secretpower: ["3M"], + shockwave: ["3M"], + sludge: ["3L13"], + sludgebomb: ["3M", "3L47"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 32}, + ], + }, + shellder: { + learnset: { + attract: ["3M"], + aurorabeam: ["3L17"], + barrier: ["3E"], + blizzard: ["3M"], + bubblebeam: ["3E"], + clamp: ["3L41"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + explosion: ["3T"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + icebeam: ["3M", "3L49"], + iciclespear: ["3L8"], + leer: ["3L33"], + mimic: ["3T"], + protect: ["3M", "3L25"], + raindance: ["3M"], + rapidspin: ["3E"], + rest: ["3M"], + return: ["3M"], + screech: ["3E"], + secretpower: ["3M"], + substitute: ["3T"], + supersonic: ["3L9"], + surf: ["3M"], + tackle: ["3L1"], + toxic: ["3M"], + waterpulse: ["3M"], + withdraw: ["3L1"], + }, + }, + cloyster: { + learnset: { + attract: ["3M"], + aurorabeam: ["3L1"], + blizzard: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + explosion: ["3T"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + mimic: ["3T"], + protect: ["3M", "3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + spikecannon: ["3L41"], + spikes: ["3L33"], + substitute: ["3T"], + supersonic: ["3L1"], + surf: ["3M"], + torment: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + withdraw: ["3L1"], + }, + }, + gastly: { + learnset: { + astonish: ["3E"], + attract: ["3M"], + confuseray: ["3L21"], + curse: ["3L13"], + destinybond: ["3L33"], + doubleteam: ["3M"], + dreameater: ["3T", "3L28"], + explosion: ["3T", "3E"], + facade: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + grudge: ["3E"], + haze: ["3E"], + hiddenpower: ["3M"], + hypnosis: ["3L1"], + lick: ["3L1"], + meanlook: ["3L13"], + mimic: ["3T"], + nightmare: ["3T", "3L41"], + nightshade: ["3L16"], + perishsong: ["3E"], + protect: ["3M"], + psychic: ["3M"], + psywave: ["3E"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + shadowball: ["3M", "3L36"], + skillswap: ["3M"], + sludgebomb: ["3M"], + snatch: ["3M"], + spite: ["3L8"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + thief: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + haunter: { + learnset: { + attract: ["3M"], + confuseray: ["3L21"], + curse: ["3L13"], + destinybond: ["3L39"], + doubleteam: ["3M"], + dreameater: ["3T", "3L31"], + explosion: ["3T"], + facade: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hypnosis: ["3L1"], + lick: ["3L1"], + meanlook: ["3L13"], + mimic: ["3T"], + nightmare: ["3T", "3L53"], + nightshade: ["3L16"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + shadowball: ["3M", "3L45"], + shadowpunch: ["3L25"], + skillswap: ["3M"], + sludgebomb: ["3M"], + snatch: ["3M"], + spite: ["3L1"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + thief: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 20}, + ], + }, + gengar: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + confuseray: ["3L21"], + counter: ["3T"], + curse: ["3L13"], + destinybond: ["3L39"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T", "3L31"], + explosion: ["3T"], + facade: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + hypnosis: ["3L1"], + lick: ["3L1"], + meanlook: ["3L13"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + nightmare: ["3T", "3L53"], + nightshade: ["3L16"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M", "3L45"], + shadowpunch: ["3L25"], + skillswap: ["3M"], + sludgebomb: ["3M"], + snatch: ["3M"], + spite: ["3L1"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + onix: { + learnset: { + attract: ["3M"], + bind: ["3L8"], + bodyslam: ["3T"], + dig: ["3M"], + doubleedge: ["3T", "3L56"], + doubleteam: ["3M"], + dragonbreath: ["3L30"], + earthquake: ["3M"], + explosion: ["3T", "3E"], + facade: ["3M"], + frustration: ["3M"], + harden: ["3L19"], + hiddenpower: ["3M"], + irontail: ["3M", "3L45"], + mimic: ["3T"], + protect: ["3M"], + rage: ["3L23"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rockthrow: ["3L12"], + rocktomb: ["3M"], + sandstorm: ["3M", "3L33"], + sandtomb: ["3L49"], + screech: ["3L1"], + secretpower: ["3M"], + slam: ["3L37"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + taunt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + steelix: { + learnset: { + attract: ["3M"], + bind: ["3L8"], + bodyslam: ["3T"], + crunch: ["3L49"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T", "3L56"], + doubleteam: ["3M"], + dragonbreath: ["3L30"], + earthquake: ["3M"], + explosion: ["3T"], + facade: ["3M"], + frustration: ["3M"], + harden: ["3L19"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M", "3L45"], + mimic: ["3T"], + protect: ["3M"], + rage: ["3L23"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rockthrow: ["3L12"], + rocktomb: ["3M"], + sandstorm: ["3M", "3L33"], + screech: ["3L1"], + secretpower: ["3M"], + slam: ["3L37"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + taunt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + drowzee: { + learnset: { + attract: ["3M"], + barrier: ["3E"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + confusion: ["3L11"], + counter: ["3T"], + disable: ["3L7"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + firepunch: ["3T", "3E"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + futuresight: ["3L45"], + headbutt: ["3L17"], + hiddenpower: ["3M"], + hypnosis: ["3L1"], + icepunch: ["3T", "3E"], + lightscreen: ["3M"], + meditate: ["3L27"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + poisongas: ["3L21"], + pound: ["3L1"], + protect: ["3M"], + psychic: ["3M", "3L31"], + psychup: ["3T", "3L37"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + roleplay: ["3E"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + skillswap: ["3M"], + snatch: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swagger: ["3T", "3L41"], + taunt: ["3M"], + thief: ["3M"], + thunderpunch: ["3T", "3E"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + hypno: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + confusion: ["3L1"], + counter: ["3T"], + disable: ["3L1"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + futuresight: ["3L57"], + headbutt: ["3L17"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + hypnosis: ["3L1"], + lightscreen: ["3M"], + meditate: ["3L29"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + nightmare: ["3T", "3L1"], + poisongas: ["3L21"], + pound: ["3L1"], + protect: ["3M"], + psychic: ["3M", "3L35"], + psychup: ["3T", "3L43"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + skillswap: ["3M"], + snatch: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swagger: ["3T", "3L49"], + taunt: ["3M"], + thief: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + krabby: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + bubble: ["3L1"], + crabhammer: ["3L45"], + cut: ["3M"], + dig: ["3M", "3E"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flail: ["3L49", "3E"], + frustration: ["3M"], + guillotine: ["3L34"], + hail: ["3M"], + harden: ["3L16"], + haze: ["3E"], + hiddenpower: ["3M"], + icebeam: ["3M"], + knockoff: ["3E"], + leer: ["3L5"], + mimic: ["3T"], + mudshot: ["3L23"], + protect: ["3M", "3L38"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + secretpower: ["3M"], + slam: ["3E"], + stomp: ["3L27"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + swordsdance: ["3T", "3E"], + thief: ["3M"], + toxic: ["3M"], + visegrip: ["3L12"], + waterpulse: ["3M"], + }, + }, + kingler: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + bubble: ["3L1"], + crabhammer: ["3L57"], + cut: ["3M"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flail: ["3L65"], + frustration: ["3M"], + guillotine: ["3L38"], + hail: ["3M"], + harden: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + leer: ["3L1"], + metalclaw: ["3L1"], + mimic: ["3T"], + mudshot: ["3L23"], + protect: ["3M", "3L42"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + secretpower: ["3M"], + stomp: ["3L27"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + swordsdance: ["3T"], + thief: ["3M"], + toxic: ["3M"], + visegrip: ["3L1"], + waterpulse: ["3M"], + }, + encounters: [ + {generation: 3, level: 25}, + ], + }, + voltorb: { + learnset: { + charge: ["3L1"], + doubleteam: ["3M"], + explosion: ["3T", "3L46"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + lightscreen: ["3M", "3L37"], + mimic: ["3T"], + mirrorcoat: ["3L49"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rollout: ["3T", "3L32"], + screech: ["3L8"], + secretpower: ["3M"], + selfdestruct: ["3T", "3L27"], + shockwave: ["3M"], + sonicboom: ["3L15"], + spark: ["3L21"], + substitute: ["3T"], + swift: ["3T", "3L42"], + tackle: ["3L1"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + electrode: { + learnset: { + charge: ["3L1"], + doubleteam: ["3M"], + explosion: ["3T", "3L54"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + lightscreen: ["3M", "3L41"], + mimic: ["3T"], + mirrorcoat: ["3L59"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rollout: ["3T", "3L34"], + screech: ["3L1"], + secretpower: ["3M"], + selfdestruct: ["3T", "3L27"], + shockwave: ["3M"], + sonicboom: ["3L1"], + spark: ["3L21"], + substitute: ["3T"], + swift: ["3T", "3L48"], + tackle: ["3L1"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 3, nature: "Hasty", ivs: {hp: 19, atk: 16, def: 18, spa: 25, spd: 25, spe: 19}, abilities: ["static"], pokeball: "pokeball"}, + ], + }, + exeggcute: { + learnset: { + attract: ["3M"], + barrage: ["3L1"], + bulletseed: ["3M"], + confusion: ["3L19"], + curse: ["3E"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + explosion: ["3T"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hypnosis: ["3L1"], + ingrain: ["3E"], + leechseed: ["3L13"], + lightscreen: ["3M"], + mimic: ["3T"], + moonlight: ["3E"], + poisonpowder: ["3L31"], + protect: ["3M"], + psychic: ["3M"], + reflect: ["3M", "3L7", "3E"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + skillswap: ["3M"], + sleeppowder: ["3L37"], + sludgebomb: ["3M"], + solarbeam: ["3M", "3L43"], + strength: ["3M"], + stunspore: ["3L25"], + substitute: ["3T"], + sunnyday: ["3M"], + synthesis: ["3E"], + thief: ["3M"], + toxic: ["3M"], + uproar: ["3L1"], + }, + }, + exeggutor: { + learnset: { + attract: ["3M"], + barrage: ["3L1"], + bulletseed: ["3M"], + confusion: ["3L1"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + eggbomb: ["3L31"], + explosion: ["3T"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + hypnosis: ["3L1"], + lightscreen: ["3M"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + skillswap: ["3M"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + stomp: ["3L19"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + cubone: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bellydrum: ["3E"], + blizzard: ["3M"], + bodyslam: ["3T"], + boneclub: ["3L9"], + bonemerang: ["3L25"], + bonerush: ["3L41"], + brickbreak: ["3M"], + counter: ["3T"], + dig: ["3M"], + doubleedge: ["3T", "3L45"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + falseswipe: ["3L33"], + fireblast: ["3M"], + flamethrower: ["3M"], + focusenergy: ["3L21"], + focuspunch: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + headbutt: ["3L13"], + hiddenpower: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + leer: ["3L17"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + perishsong: ["3E"], + protect: ["3M"], + rage: ["3L29"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + screech: ["3E"], + secretpower: ["3M"], + seismictoss: ["3T"], + skullbash: ["3E"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T", "3E"], + tailwhip: ["3L5"], + thief: ["3M"], + thrash: ["3L37"], + toxic: ["3M"], + }, + }, + marowak: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + boneclub: ["3L1"], + bonemerang: ["3L25"], + bonerush: ["3L53"], + brickbreak: ["3M"], + counter: ["3T"], + dig: ["3M"], + doubleedge: ["3T", "3L61"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + falseswipe: ["3L39"], + fireblast: ["3M"], + flamethrower: ["3M"], + focusenergy: ["3L21"], + focuspunch: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + headbutt: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + leer: ["3L17"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + rage: ["3L32"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + tailwhip: ["3L1"], + thief: ["3M"], + thrash: ["3L46"], + toxic: ["3M"], + }, + }, + tyrogue: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bulkup: ["3M"], + counter: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + highjumpkick: ["3E"], + machpunch: ["3E"], + megakick: ["3T"], + mimic: ["3T"], + mindreader: ["3E"], + protect: ["3M"], + raindance: ["3M"], + rapidspin: ["3E"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + hitmonlee: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M", "3L20"], + bulkup: ["3M"], + counter: ["3T"], + doubleedge: ["3T"], + doublekick: ["3L1"], + doubleteam: ["3M"], + earthquake: ["3M"], + endure: ["3T", "3L41"], + facade: ["3M"], + focusenergy: ["3L21"], + focuspunch: ["3M"], + foresight: ["3L36"], + frustration: ["3M"], + hiddenpower: ["3M"], + highjumpkick: ["3L26"], + jumpkick: ["3L16"], + meditate: ["3L6"], + megakick: ["3T", "3L46"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mindreader: ["3L31"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + revenge: ["3L1"], + reversal: ["3L51"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + rollingkick: ["3L11"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + hitmonchan: { + learnset: { + agility: ["3L7"], + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bulkup: ["3M"], + cometpunch: ["3L1"], + counter: ["3T", "3L50"], + detect: ["3L44"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + firepunch: ["3T", "3L26"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + icepunch: ["3T", "3L26"], + machpunch: ["3L20"], + megakick: ["3T"], + megapunch: ["3T", "3L38"], + metronome: ["3T"], + mimic: ["3T"], + protect: ["3M"], + pursuit: ["3L13"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + revenge: ["3L1"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + skyuppercut: ["3L32"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + thunderpunch: ["3T", "3L26"], + toxic: ["3M"], + }, + }, + hitmontop: { + learnset: { + agility: ["3L37"], + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bulkup: ["3M"], + counter: ["3T", "3L31"], + detect: ["3L43"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + endeavor: ["3L49"], + facade: ["3M"], + focusenergy: ["3L7"], + frustration: ["3M"], + hiddenpower: ["3M"], + megakick: ["3T"], + mimic: ["3T"], + protect: ["3M"], + pursuit: ["3L13"], + quickattack: ["3L19"], + raindance: ["3M"], + rapidspin: ["3L25"], + rest: ["3M"], + return: ["3M"], + revenge: ["3L1"], + rockslide: ["3T"], + rocksmash: ["3M"], + rollingkick: ["3L1"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + triplekick: ["3L20"], + }, + }, + lickitung: { + learnset: { + attract: ["3M"], + bellydrum: ["3E"], + blizzard: ["3M"], + bodyslam: ["3T", "3E"], + brickbreak: ["3M"], + counter: ["3T"], + curse: ["3E"], + cut: ["3M"], + defensecurl: ["3T", "3L12"], + dig: ["3M"], + disable: ["3L34"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + knockoff: ["3L18"], + lick: ["3L1"], + magnitude: ["3E"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + refresh: ["3L51"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + screech: ["3L45"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + slam: ["3L40"], + sleeptalk: ["3E"], + snore: ["3T", "3E"], + solarbeam: ["3M"], + stomp: ["3L23"], + strength: ["3M"], + substitute: ["3T", "3E"], + sunnyday: ["3M"], + supersonic: ["3L7"], + surf: ["3M"], + swordsdance: ["3T"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + wrap: ["3L29"], + }, + }, + koffing: { + learnset: { + attract: ["3M"], + destinybond: ["3L45", "3E"], + doubleteam: ["3M"], + explosion: ["3T", "3L41"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + frustration: ["3M"], + haze: ["3L33"], + hiddenpower: ["3M"], + memento: ["3L49"], + mimic: ["3T"], + painsplit: ["3E"], + poisongas: ["3L1"], + protect: ["3M"], + psybeam: ["3E"], + psywave: ["3E"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + screech: ["3E"], + secretpower: ["3M"], + selfdestruct: ["3T", "3L17"], + shadowball: ["3M"], + shockwave: ["3M"], + sludge: ["3L21"], + sludgebomb: ["3M"], + smog: ["3L9"], + smokescreen: ["3L25"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + weezing: { + learnset: { + attract: ["3M"], + destinybond: ["3L51"], + doubleteam: ["3M"], + explosion: ["3T", "3L44"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + frustration: ["3M"], + haze: ["3L33"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + memento: ["3L58"], + mimic: ["3T"], + poisongas: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + selfdestruct: ["3T", "3L1"], + shadowball: ["3M"], + shockwave: ["3M"], + sludge: ["3L21"], + sludgebomb: ["3M"], + smog: ["3L1"], + smokescreen: ["3L25"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + torment: ["3M"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 32}, + ], + }, + rhyhorn: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + counter: ["3T", "3E"], + crunch: ["3E"], + curse: ["3E"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M", "3L52"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + frustration: ["3M"], + furyattack: ["3L15"], + hiddenpower: ["3M"], + hornattack: ["3L1"], + horndrill: ["3L38"], + icebeam: ["3M"], + irontail: ["3M"], + magnitude: ["3E"], + megahorn: ["3L57"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockblast: ["3L29"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + scaryface: ["3L24"], + secretpower: ["3M"], + shockwave: ["3M"], + stomp: ["3L10"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T", "3E"], + tailwhip: ["3L1"], + takedown: ["3L43"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + }, + }, + rhydon: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M", "3L58"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + furyattack: ["3L1"], + hiddenpower: ["3M"], + hornattack: ["3L1"], + horndrill: ["3L38"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + megahorn: ["3L66"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockblast: ["3L29"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + scaryface: ["3L24"], + secretpower: ["3M"], + seismictoss: ["3T"], + shockwave: ["3M"], + stomp: ["3L1"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + swordsdance: ["3T"], + tailwhip: ["3L1"], + takedown: ["3L46"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + }, + }, + chansey: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + counter: ["3T"], + defensecurl: ["3T", "3L41"], + doubleedge: ["3T", "3L57"], + doubleslap: ["3L17"], + doubleteam: ["3M"], + dreameater: ["3T"], + earthquake: ["3M"], + eggbomb: ["3L35"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + lightscreen: ["3M", "3L49"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T", "3E"], + mimic: ["3T"], + minimize: ["3L23"], + pound: ["3L1"], + present: ["3E"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + refresh: ["3L9"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + safeguard: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sing: ["3L29"], + skillswap: ["3M"], + snatch: ["3M"], + softboiled: ["3T", "3L13"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T", "3E"], + sunnyday: ["3M"], + tailwhip: ["3L5"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + blissey: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + counter: ["3T"], + defensecurl: ["3T", "3L33"], + doubleedge: ["3T", "3L47"], + doubleslap: ["3L13"], + doubleteam: ["3M"], + dreameater: ["3T"], + earthquake: ["3M"], + eggbomb: ["3L28"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + lightscreen: ["3M", "3L40"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + minimize: ["3L18"], + pound: ["3L1"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + refresh: ["3L7"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + safeguard: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sing: ["3L23"], + skillswap: ["3M"], + snatch: ["3M"], + softboiled: ["3T", "3L10"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tailwhip: ["3L4"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + tangela: { + learnset: { + absorb: ["3L10"], + amnesia: ["3E"], + attract: ["3M"], + bind: ["3L28"], + bodyslam: ["3T"], + bulletseed: ["3M"], + confusion: ["3E"], + constrict: ["3L1"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + growth: ["3L13"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + ingrain: ["3L1"], + leechseed: ["3E"], + megadrain: ["3L31", "3E"], + mimic: ["3T"], + poisonpowder: ["3L19"], + protect: ["3M"], + reflect: ["3E"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + slam: ["3L40"], + sleeppowder: ["3L4"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + stunspore: ["3L37"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + thief: ["3M"], + tickle: ["3L46"], + toxic: ["3M"], + vinewhip: ["3L22"], + }, + }, + kangaskhan: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bite: ["3L7"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + cometpunch: ["3L1"], + counter: ["3T", "3E"], + cut: ["3M"], + dig: ["3M"], + disable: ["3E"], + dizzypunch: ["3L43"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + endure: ["3T", "3L37"], + facade: ["3M"], + fakeout: ["3L19"], + fireblast: ["3M"], + flamethrower: ["3M"], + focusenergy: ["3E"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + megakick: ["3T"], + megapunch: ["3T", "3L25"], + mimic: ["3T"], + protect: ["3M"], + rage: ["3L31"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + reversal: ["3L49"], + roar: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + safeguard: ["3E"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + solarbeam: ["3M"], + stomp: ["3E"], + strength: ["3M"], + substitute: ["3T", "3E"], + sunnyday: ["3M"], + surf: ["3M"], + tailwhip: ["3L13"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + horsea: { + learnset: { + agility: ["3L36"], + attract: ["3M"], + aurorabeam: ["3E"], + blizzard: ["3M"], + bubble: ["3L1"], + disable: ["3E"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragondance: ["3L50"], + dragonrage: ["3E"], + facade: ["3M"], + flail: ["3E"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L43"], + icebeam: ["3M"], + leer: ["3L15"], + mimic: ["3T"], + octazooka: ["3E"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + smokescreen: ["3L8"], + splash: ["3E"], + substitute: ["3T"], + surf: ["3M"], + toxic: ["3M"], + twister: ["3L29"], + waterfall: ["3M"], + watergun: ["3L22"], + waterpulse: ["3M"], + }, + }, + seadra: { + learnset: { + agility: ["3L40"], + attract: ["3M"], + blizzard: ["3M"], + bubble: ["3L1"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragondance: ["3L62"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L51"], + hyperbeam: ["3M"], + icebeam: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + smokescreen: ["3L1"], + substitute: ["3T"], + surf: ["3M"], + toxic: ["3M"], + twister: ["3L29"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + }, + encounters: [ + {generation: 3, level: 25}, + ], + }, + kingdra: { + learnset: { + agility: ["3L40"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + bubble: ["3L1"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragondance: ["3L62"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L51"], + hyperbeam: ["3M"], + icebeam: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + smokescreen: ["3L1"], + substitute: ["3T"], + surf: ["3M"], + toxic: ["3M"], + twister: ["3L29"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + }, + }, + goldeen: { + learnset: { + agility: ["3L52"], + attract: ["3M"], + blizzard: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flail: ["3L24"], + frustration: ["3M"], + furyattack: ["3L29"], + hail: ["3M"], + haze: ["3E"], + hiddenpower: ["3M"], + hornattack: ["3L15"], + horndrill: ["3L43"], + hydropump: ["3E"], + icebeam: ["3M"], + megahorn: ["3L57"], + mimic: ["3T"], + peck: ["3L1"], + protect: ["3M"], + psybeam: ["3E"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + substitute: ["3T"], + supersonic: ["3L10"], + surf: ["3M"], + tailwhip: ["3L1"], + toxic: ["3M"], + waterfall: ["3M", "3L38"], + waterpulse: ["3M"], + watersport: ["3L1"], + }, + }, + seaking: { + learnset: { + agility: ["3L61"], + attract: ["3M"], + blizzard: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flail: ["3L24"], + frustration: ["3M"], + furyattack: ["3L29"], + hail: ["3M"], + hiddenpower: ["3M"], + hornattack: ["3L15"], + horndrill: ["3L49"], + hyperbeam: ["3M"], + icebeam: ["3M"], + megahorn: ["3L69"], + mimic: ["3T"], + peck: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + substitute: ["3T"], + supersonic: ["3L1"], + surf: ["3M"], + tailwhip: ["3L1"], + toxic: ["3M"], + waterfall: ["3M", "3L41"], + waterpulse: ["3M"], + watersport: ["3L1"], + }, + encounters: [ + {generation: 3, level: 20}, + ], + }, + staryu: { + learnset: { + blizzard: ["3M"], + bubblebeam: ["3L28"], + camouflage: ["3L19"], + cosmicpower: ["3L42"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hail: ["3M"], + harden: ["3L1"], + hiddenpower: ["3M"], + hydropump: ["3L46"], + icebeam: ["3M"], + lightscreen: ["3M", "3L37"], + mimic: ["3T"], + minimize: ["3L33"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + rapidspin: ["3L10"], + recover: ["3L15"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + substitute: ["3T"], + surf: ["3M"], + swift: ["3T", "3L24"], + tackle: ["3L1"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L6"], + waterpulse: ["3M"], + }, + }, + starmie: { + learnset: { + blizzard: ["3M"], + confuseray: ["3L33"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + lightscreen: ["3M"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + rapidspin: ["3L1"], + recover: ["3L1"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + skillswap: ["3M"], + substitute: ["3T"], + surf: ["3M"], + swift: ["3T", "3L1"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + }, + }, + mrmime: { + learnset: { + attract: ["3M"], + barrier: ["3L1"], + batonpass: ["3L47"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + confusion: ["3L5"], + counter: ["3T"], + doubleedge: ["3T"], + doubleslap: ["3L15"], + doubleteam: ["3M"], + dreameater: ["3T"], + encore: ["3L25"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + futuresight: ["3E"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + hypnosis: ["3E"], + lightscreen: ["3M", "3L19"], + magicalleaf: ["3L22"], + meditate: ["3L12"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T", "3E"], + protect: ["3M"], + psybeam: ["3L29"], + psychic: ["3M", "3L43"], + psychup: ["3T", "3E"], + raindance: ["3M"], + recycle: ["3L33"], + reflect: ["3M", "3L19"], + rest: ["3M"], + return: ["3M"], + roleplay: ["3L40"], + safeguard: ["3M", "3L50"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + skillswap: ["3M"], + snatch: ["3M"], + solarbeam: ["3M"], + substitute: ["3T", "3L8"], + sunnyday: ["3M"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + trick: ["3L36", "3E"], + }, + }, + scyther: { + learnset: { + aerialace: ["3M"], + agility: ["3L21"], + attract: ["3M"], + batonpass: ["3E"], + counter: ["3T", "3E"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M", "3L41"], + endure: ["3T", "3E"], + facade: ["3M"], + falseswipe: ["3L16"], + focusenergy: ["3L6"], + frustration: ["3M"], + furycutter: ["3T", "3L46"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + leer: ["3L1"], + lightscreen: ["3E"], + mimic: ["3T"], + protect: ["3M"], + pursuit: ["3L11"], + quickattack: ["3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + reversal: ["3E"], + rocksmash: ["3M"], + safeguard: ["3E"], + secretpower: ["3M"], + silverwind: ["3E"], + slash: ["3L31"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T", "3L36"], + thief: ["3M"], + toxic: ["3M"], + wingattack: ["3L26"], + }, + }, + scizor: { + learnset: { + aerialace: ["3M"], + agility: ["3L21"], + attract: ["3M"], + counter: ["3T"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M", "3L41"], + facade: ["3M"], + falseswipe: ["3L16"], + focusenergy: ["3L6"], + frustration: ["3M"], + furycutter: ["3T", "3L46"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irondefense: ["3L41"], + leer: ["3L1"], + metalclaw: ["3L26"], + mimic: ["3T"], + protect: ["3M"], + pursuit: ["3L11"], + quickattack: ["3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + slash: ["3L31"], + steelwing: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T", "3L36"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + smoochum: { + learnset: { + attract: ["3M"], + blizzard: ["3M", "3L57"], + bodyslam: ["3T"], + calmmind: ["3M"], + confusion: ["3L21"], + counter: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + faketears: ["3L37"], + flash: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + icebeam: ["3M"], + icepunch: ["3T", "3E"], + lick: ["3L1"], + lightscreen: ["3M"], + meanlook: ["3L33"], + meditate: ["3E"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + perishsong: ["3L49"], + pound: ["3L1"], + powdersnow: ["3L13"], + protect: ["3M"], + psychic: ["3M", "3L45"], + psychup: ["3T", "3E"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + sing: ["3L25"], + skillswap: ["3M"], + substitute: ["3T"], + sweetkiss: ["3L9"], + thief: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + jynx: { + learnset: { + attract: ["3M"], + blizzard: ["3M", "3L67"], + bodyslam: ["3T", "3L51"], + brickbreak: ["3M"], + calmmind: ["3M"], + counter: ["3T"], + doubleedge: ["3T"], + doubleslap: ["3L21"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + faketears: ["3L41"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + icepunch: ["3T", "3L25"], + lick: ["3L1"], + lightscreen: ["3M"], + lovelykiss: ["3L1"], + meanlook: ["3L35"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + perishsong: ["3L57"], + pound: ["3L1"], + powdersnow: ["3L1"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + skillswap: ["3M"], + substitute: ["3T"], + taunt: ["3M"], + thief: ["3M"], + torment: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + encounters: [ + {generation: 3, level: 20, nature: "Mild", ivs: {hp: 18, atk: 17, def: 18, spa: 22, spd: 25, spe: 21}, abilities: ["oblivious"], pokeball: "pokeball"}, + ], + }, + elekid: { + learnset: { + attract: ["3M"], + barrier: ["3E"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + crosschop: ["3E"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + firepunch: ["3T", "3E"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + icepunch: ["3T", "3E"], + karatechop: ["3E"], + leer: ["3L1"], + lightscreen: ["3M", "3L17"], + meditate: ["3E"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + quickattack: ["3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rollingkick: ["3E"], + screech: ["3L33"], + secretpower: ["3M"], + seismictoss: ["3T"], + shockwave: ["3M"], + substitute: ["3T"], + swift: ["3T", "3L25"], + thief: ["3M"], + thunder: ["3M", "3L49"], + thunderbolt: ["3M", "3L41"], + thunderpunch: ["3T", "3L9"], + thunderwave: ["3T"], + toxic: ["3M"], + }, + }, + electabuzz: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + lightscreen: ["3M", "3L17"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + quickattack: ["3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + screech: ["3L36"], + secretpower: ["3M"], + seismictoss: ["3T"], + shockwave: ["3M"], + strength: ["3M"], + substitute: ["3T"], + swift: ["3T", "3L25"], + thief: ["3M"], + thunder: ["3M", "3L58"], + thunderbolt: ["3M", "3L47"], + thunderpunch: ["3T", "3L1"], + thunderwave: ["3T"], + toxic: ["3M"], + }, + }, + magby: { + learnset: { + attract: ["3M"], + barrier: ["3E"], + bodyslam: ["3T"], + brickbreak: ["3M"], + confuseray: ["3L43"], + counter: ["3T"], + crosschop: ["3E"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L1"], + facade: ["3M"], + fireblast: ["3M", "3L49"], + firepunch: ["3T", "3L19"], + flamethrower: ["3M", "3L37"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + irontail: ["3M"], + karatechop: ["3E"], + leer: ["3L7"], + megakick: ["3T"], + megapunch: ["3T", "3E"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + screech: ["3E"], + secretpower: ["3M"], + seismictoss: ["3T"], + smog: ["3L13"], + smokescreen: ["3L25"], + substitute: ["3T"], + sunnyday: ["3M", "3L31"], + thief: ["3M"], + thunderpunch: ["3T", "3E"], + toxic: ["3M"], + }, + }, + magmar: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + confuseray: ["3L49"], + counter: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L1"], + facade: ["3M"], + fireblast: ["3M", "3L57"], + firepunch: ["3T", "3L1"], + flamethrower: ["3M", "3L41"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + smog: ["3L1"], + smokescreen: ["3L25"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M", "3L33"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + pinsir: { + learnset: { + attract: ["3M"], + bind: ["3L7"], + bodyslam: ["3T"], + brickbreak: ["3M", "3L31"], + bulkup: ["3M"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + falseswipe: ["3E"], + focusenergy: ["3L1"], + focuspunch: ["3M"], + frustration: ["3M"], + furyattack: ["3E"], + guillotine: ["3L37"], + harden: ["3L19"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + revenge: ["3L25"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T", "3L13"], + strength: ["3M"], + submission: ["3L43"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T", "3L49"], + thief: ["3M"], + toxic: ["3M"], + visegrip: ["3L1"], + }, + }, + tauros: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hornattack: ["3L8"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + pursuit: ["3L19"], + rage: ["3L4"], + raindance: ["3M"], + rest: ["3M", "3L34"], + return: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + scaryface: ["3L13"], + secretpower: ["3M"], + shockwave: ["3M"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + swagger: ["3T", "3L26"], + tackle: ["3L1"], + tailwhip: ["3L1"], + takedown: ["3L53"], + thrash: ["3L43"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + magikarp: { + learnset: { + flail: ["3L30"], + splash: ["3L1"], + tackle: ["3L15"], + }, + }, + gyarados: { + learnset: { + attract: ["3M"], + bite: ["3L20"], + blizzard: ["3M"], + bodyslam: ["3T"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragondance: ["3L50"], + dragonrage: ["3L25"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L40"], + hyperbeam: ["3M", "3L55"], + icebeam: ["3M"], + leer: ["3L30"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M", "3L45"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + taunt: ["3M"], + thrash: ["3L1"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + twister: ["3L35"], + waterfall: ["3M"], + waterpulse: ["3M"], + }, + encounters: [ + {generation: 3, level: 5}, + ], + }, + lapras: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T", "3L13"], + confuseray: ["3L19"], + curse: ["3E"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragondance: ["3E"], + dreameater: ["3T"], + facade: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + hail: ["3M"], + hiddenpower: ["3M"], + horndrill: ["3E"], + hydropump: ["3L49"], + hyperbeam: ["3M"], + icebeam: ["3M", "3L31"], + irontail: ["3M"], + mimic: ["3T"], + mist: ["3L7"], + perishsong: ["3L25"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M", "3L37"], + refresh: ["3E"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + safeguard: ["3M", "3L43"], + secretpower: ["3M"], + sheercold: ["3L55"], + shockwave: ["3M"], + sing: ["3L1"], + sleeptalk: ["3T", "3E"], + strength: ["3M"], + substitute: ["3T", "3E"], + surf: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + tickle: ["3E"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + }, + }, + ditto: { + learnset: { + transform: ["3L1"], + }, + encounters: [ + {generation: 3, level: 23}, + ], + }, + eevee: { + learnset: { + attract: ["3M"], + batonpass: ["3L36"], + bite: ["3L30"], + bodyslam: ["3T"], + charm: ["3E"], + curse: ["3E"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + endure: ["3T", "3E"], + facade: ["3M"], + flail: ["3E"], + frustration: ["3M"], + growl: ["3L16"], + helpinghand: ["3L1"], + hiddenpower: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + quickattack: ["3L23"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + sandattack: ["3L8"], + secretpower: ["3M"], + shadowball: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + tailwhip: ["3L1"], + takedown: ["3L42"], + toxic: ["3M"], + wish: ["3E"], + }, + }, + vaporeon: { + learnset: { + acidarmor: ["3L47"], + attract: ["3M"], + aurorabeam: ["3L36"], + bite: ["3L30"], + blizzard: ["3M"], + bodyslam: ["3T"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + haze: ["3L42"], + helpinghand: ["3L1"], + hiddenpower: ["3M"], + hydropump: ["3L52"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + quickattack: ["3L23"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + sandattack: ["3L8"], + secretpower: ["3M"], + shadowball: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + tackle: ["3L1"], + tailwhip: ["3L1"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L16"], + waterpulse: ["3M"], + }, + }, + jolteon: { + learnset: { + agility: ["3L47"], + attract: ["3M"], + bodyslam: ["3T"], + dig: ["3M"], + doubleedge: ["3T"], + doublekick: ["3L30"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + helpinghand: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + pinmissile: ["3L36"], + protect: ["3M"], + quickattack: ["3L23"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + sandattack: ["3L8"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + tailwhip: ["3L1"], + thunder: ["3M", "3L52"], + thunderbolt: ["3M"], + thundershock: ["3L16"], + thunderwave: ["3T", "3L42"], + toxic: ["3M"], + }, + }, + flareon: { + learnset: { + attract: ["3M"], + bite: ["3L30"], + bodyslam: ["3T"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L16"], + facade: ["3M"], + fireblast: ["3M"], + firespin: ["3L36"], + flamethrower: ["3M", "3L52"], + frustration: ["3M"], + helpinghand: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + leer: ["3L47"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + quickattack: ["3L23"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + sandattack: ["3L8"], + secretpower: ["3M"], + shadowball: ["3M"], + smog: ["3L42"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + tailwhip: ["3L1"], + toxic: ["3M"], + }, + }, + porygon: { + learnset: { + aerialace: ["3M"], + agility: ["3L9"], + blizzard: ["3M"], + conversion: ["3L1"], + conversion2: ["3L1"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + lockon: ["3L32"], + mimic: ["3T"], + protect: ["3M"], + psybeam: ["3L12"], + psychic: ["3M"], + raindance: ["3M"], + recover: ["3L20"], + recycle: ["3L44"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + shadowball: ["3M"], + sharpen: ["3L24"], + shockwave: ["3M"], + solarbeam: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + triattack: ["3L36"], + zapcannon: ["3L48"], + }, + }, + porygon2: { + learnset: { + aerialace: ["3M"], + agility: ["3L9"], + blizzard: ["3M"], + conversion: ["3L1"], + conversion2: ["3L1"], + defensecurl: ["3T", "3L24"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + lockon: ["3L32"], + mimic: ["3T"], + protect: ["3M"], + psybeam: ["3L12"], + psychic: ["3M"], + raindance: ["3M"], + recover: ["3L20"], + recycle: ["3L44"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + solarbeam: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + triattack: ["3L36"], + zapcannon: ["3L48"], + }, + }, + omanyte: { + learnset: { + ancientpower: ["3L49"], + attract: ["3M"], + aurorabeam: ["3E"], + bite: ["3L13"], + blizzard: ["3M"], + bodyslam: ["3T"], + bubblebeam: ["3E"], + constrict: ["3L1"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + haze: ["3E"], + hiddenpower: ["3M"], + hydropump: ["3L55"], + icebeam: ["3M"], + leer: ["3L31"], + mimic: ["3T"], + mudshot: ["3L25"], + protect: ["3M", "3L37"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + slam: ["3E"], + spikes: ["3E"], + substitute: ["3T"], + supersonic: ["3E"], + surf: ["3M"], + thief: ["3M"], + tickle: ["3L43"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L19"], + waterpulse: ["3M"], + withdraw: ["3L1"], + }, + }, + omastar: { + learnset: { + ancientpower: ["3L55"], + attract: ["3M"], + bite: ["3L1"], + blizzard: ["3M"], + bodyslam: ["3T"], + constrict: ["3L1"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L65"], + hyperbeam: ["3M"], + icebeam: ["3M"], + leer: ["3L31"], + mimic: ["3T"], + mudshot: ["3L25"], + protect: ["3M", "3L37"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + spikecannon: ["3L40"], + substitute: ["3T"], + surf: ["3M"], + thief: ["3M"], + tickle: ["3L46"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + withdraw: ["3L1"], + }, + }, + kabuto: { + learnset: { + absorb: ["3L13"], + aerialace: ["3M"], + ancientpower: ["3L55"], + attract: ["3M"], + aurorabeam: ["3E"], + blizzard: ["3M"], + bodyslam: ["3T"], + bubblebeam: ["3E"], + confuseray: ["3E"], + dig: ["3M", "3E"], + doubleedge: ["3T"], + doubleteam: ["3M"], + endure: ["3T", "3L37"], + facade: ["3M"], + flail: ["3E"], + frustration: ["3M"], + gigadrain: ["3M"], + hail: ["3M"], + harden: ["3L1"], + hiddenpower: ["3M"], + icebeam: ["3M"], + knockoff: ["3E"], + leer: ["3L19"], + megadrain: ["3L49"], + metalsound: ["3L43"], + mimic: ["3T"], + mudshot: ["3L25"], + protect: ["3M"], + raindance: ["3M"], + rapidspin: ["3E"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandattack: ["3L31"], + sandstorm: ["3M"], + scratch: ["3L1"], + secretpower: ["3M"], + substitute: ["3T"], + surf: ["3M"], + thief: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + waterpulse: ["3M"], + }, + }, + kabutops: { + learnset: { + absorb: ["3L1"], + aerialace: ["3M"], + ancientpower: ["3L65"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + cut: ["3M"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + endure: ["3T", "3L37"], + facade: ["3M"], + frustration: ["3M"], + furycutter: ["3T", "3L1"], + gigadrain: ["3M"], + hail: ["3M"], + harden: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + leer: ["3L1"], + megadrain: ["3L55"], + megakick: ["3T"], + metalsound: ["3L46"], + mimic: ["3T"], + mudshot: ["3L25"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandattack: ["3L31"], + sandstorm: ["3M"], + scratch: ["3L1"], + secretpower: ["3M"], + seismictoss: ["3T"], + slash: ["3L40"], + substitute: ["3T"], + surf: ["3M"], + swordsdance: ["3T"], + thief: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + waterpulse: ["3M"], + }, + }, + aerodactyl: { + learnset: { + aerialace: ["3M"], + agility: ["3L8"], + ancientpower: ["3L29"], + attract: ["3M"], + bite: ["3L15"], + curse: ["3E"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragonclaw: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + fly: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M", "3L50"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + pursuit: ["3E"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + scaryface: ["3L36"], + secretpower: ["3M"], + steelwing: ["3M", "3E"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L22"], + takedown: ["3L43"], + taunt: ["3M"], + thief: ["3M"], + torment: ["3M"], + toxic: ["3M"], + whirlwind: ["3E"], + wingattack: ["3L1"], + }, + }, + snorlax: { + learnset: { + amnesia: ["3L5"], + attract: ["3M"], + bellydrum: ["3L13"], + blizzard: ["3M"], + block: ["3L37"], + bodyslam: ["3T", "3L33"], + brickbreak: ["3M"], + counter: ["3T"], + covet: ["3L42"], + curse: ["3E"], + defensecurl: ["3T", "3L9"], + doubleedge: ["3T", "3E"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + headbutt: ["3L17"], + hiddenpower: ["3M"], + hyperbeam: ["3M", "3L51"], + icebeam: ["3M"], + lick: ["3E"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + rest: ["3M", "3L25"], + return: ["3M"], + rockslide: ["3T"], + rocktomb: ["3M"], + rollout: ["3T", "3L46"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + sleeptalk: ["3T", "3L37"], + snore: ["3T", "3L28"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T", "3E"], + sunnyday: ["3M"], + surf: ["3M"], + tackle: ["3L1"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + yawn: ["3L21"], + }, + }, + articuno: { + learnset: { + aerialace: ["3M"], + agility: ["3L25"], + blizzard: ["3M", "3L73"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + fly: ["3M"], + frustration: ["3M"], + gust: ["3L1"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M", "3L49"], + mimic: ["3T"], + mindreader: ["3L37"], + mist: ["3L13"], + powdersnow: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + reflect: ["3M", "3L61"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + sheercold: ["3L85"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + zapdos: { + learnset: { + aerialace: ["3M"], + agility: ["3L25"], + charge: ["3L61"], + detect: ["3L37"], + doubleedge: ["3T"], + doubleteam: ["3M"], + drillpeck: ["3L49"], + facade: ["3M"], + flash: ["3M"], + fly: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + lightscreen: ["3M", "3L73"], + mimic: ["3T"], + peck: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + shockwave: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thunder: ["3M", "3L85"], + thunderbolt: ["3M"], + thundershock: ["3L1"], + thunderwave: ["3T", "3L13"], + toxic: ["3M"], + }, + }, + moltres: { + learnset: { + aerialace: ["3M"], + agility: ["3L25"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L1"], + endure: ["3T", "3L37"], + facade: ["3M"], + fireblast: ["3M"], + firespin: ["3L13"], + flamethrower: ["3M", "3L49"], + fly: ["3M"], + frustration: ["3M"], + heatwave: ["3L73"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + safeguard: ["3M", "3L61"], + sandstorm: ["3M"], + secretpower: ["3M"], + skyattack: ["3T", "3L85"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + toxic: ["3M"], + wingattack: ["3L1"], + }, + }, + dratini: { + learnset: { + agility: ["3L36"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragondance: ["3E"], + dragonrage: ["3L22"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + frustration: ["3M"], + hail: ["3M"], + haze: ["3E"], + hiddenpower: ["3M"], + hyperbeam: ["3M", "3L57"], + icebeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + lightscreen: ["3E"], + mimic: ["3T"], + mist: ["3E"], + outrage: ["3L50"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M", "3L43"], + secretpower: ["3M"], + shockwave: ["3M"], + slam: ["3L29"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3E"], + surf: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T", "3L8"], + toxic: ["3M"], + twister: ["3L15"], + waterfall: ["3M"], + waterpulse: ["3M"], + wrap: ["3L1"], + }, + }, + dragonair: { + learnset: { + agility: ["3L38"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragonrage: ["3L22"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M", "3L65"], + icebeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + outrage: ["3L56"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M", "3L47"], + secretpower: ["3M"], + shockwave: ["3M"], + slam: ["3L29"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T", "3L1"], + toxic: ["3M"], + twister: ["3L1"], + waterfall: ["3M"], + waterpulse: ["3M"], + wrap: ["3L1"], + }, + encounters: [ + {generation: 3, level: 25, pokeball: "safariball"}, + ], + }, + dragonite: { + learnset: { + aerialace: ["3M"], + agility: ["3L38"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + cut: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragonclaw: ["3M"], + dragonrage: ["3L22"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + fly: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M", "3L75"], + icebeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + outrage: ["3L61"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + safeguard: ["3M", "3L47"], + sandstorm: ["3M"], + secretpower: ["3M"], + shockwave: ["3M"], + slam: ["3L29"], + steelwing: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T", "3L1"], + toxic: ["3M"], + twister: ["3L1"], + waterfall: ["3M"], + waterpulse: ["3M"], + wingattack: ["3L55"], + wrap: ["3L1"], + }, + }, + mewtwo: { + learnset: { + aerialace: ["3M"], + amnesia: ["3L77"], + barrier: ["3L11"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bulkup: ["3M"], + calmmind: ["3M"], + confusion: ["3L1"], + counter: ["3T"], + disable: ["3L1"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + futuresight: ["3L44"], + hail: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mist: ["3L22"], + protect: ["3M"], + psychic: ["3M", "3L66"], + psychup: ["3T", "3L33"], + raindance: ["3M"], + recover: ["3L44"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + safeguard: ["3M", "3L55"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + skillswap: ["3M"], + snatch: ["3M"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swift: ["3T", "3L22"], + taunt: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + sentret: { + learnset: { + amnesia: ["3L49"], + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + cut: ["3M"], + defensecurl: ["3T", "3L4"], + dig: ["3M"], + doubleedge: ["3T", "3E"], + doubleteam: ["3M"], + facade: ["3M"], + flamethrower: ["3M"], + focusenergy: ["3E"], + focuspunch: ["3M"], + followme: ["3L31"], + frustration: ["3M"], + furyswipes: ["3L12"], + helpinghand: ["3L17"], + hiddenpower: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + pursuit: ["3E"], + quickattack: ["3L7"], + raindance: ["3M"], + rest: ["3M", "3L40"], + return: ["3M"], + scratch: ["3L1"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + slam: ["3L24"], + slash: ["3E"], + solarbeam: ["3M"], + substitute: ["3T", "3E"], + sunnyday: ["3M"], + surf: ["3M"], + thief: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + furret: { + learnset: { + amnesia: ["3L59"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + cut: ["3M"], + defensecurl: ["3T", "3L1"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flamethrower: ["3M"], + focuspunch: ["3M"], + followme: ["3L37"], + frustration: ["3M"], + furyswipes: ["3L12"], + helpinghand: ["3L19"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + quickattack: ["3L1"], + raindance: ["3M"], + rest: ["3M", "3L48"], + return: ["3M"], + rocksmash: ["3M"], + scratch: ["3L1"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + slam: ["3L28"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + ledyba: { + learnset: { + aerialace: ["3M"], + agility: ["3L43"], + attract: ["3M"], + batonpass: ["3L29"], + brickbreak: ["3M"], + cometpunch: ["3L15"], + dig: ["3M"], + doubleedge: ["3T", "3L50"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + lightscreen: ["3M", "3L22"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + psybeam: ["3E"], + reflect: ["3M", "3L22"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M", "3L22"], + secretpower: ["3M"], + silverwind: ["3E"], + solarbeam: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L8"], + swift: ["3T", "3L36"], + swordsdance: ["3T"], + tackle: ["3L1"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + ledian: { + learnset: { + aerialace: ["3M"], + agility: ["3L51"], + attract: ["3M"], + batonpass: ["3L33"], + brickbreak: ["3M"], + cometpunch: ["3L15"], + dig: ["3M"], + doubleedge: ["3T", "3L60"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + lightscreen: ["3M", "3L24"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + reflect: ["3M", "3L24"], + rest: ["3M"], + return: ["3M"], + safeguard: ["3M", "3L24"], + secretpower: ["3M"], + solarbeam: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L1"], + swift: ["3T", "3L42"], + swordsdance: ["3T"], + tackle: ["3L1"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + spinarak: { + learnset: { + agility: ["3L45"], + attract: ["3M"], + batonpass: ["3E"], + bodyslam: ["3T"], + constrict: ["3L11"], + dig: ["3M"], + disable: ["3E"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + furyswipes: ["3L30"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + leechlife: ["3L23"], + mimic: ["3T"], + nightshade: ["3L17"], + poisonsting: ["3L1"], + protect: ["3M"], + psybeam: ["3E"], + psychic: ["3M", "3L53"], + pursuit: ["3E"], + rest: ["3M"], + return: ["3M"], + scaryface: ["3L6"], + secretpower: ["3M"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + sonicboom: ["3E"], + spiderweb: ["3L37"], + stringshot: ["3L1"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + ariados: { + learnset: { + agility: ["3L53"], + attract: ["3M"], + bodyslam: ["3T"], + constrict: ["3L1"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + furyswipes: ["3L34"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + leechlife: ["3L25"], + mimic: ["3T"], + nightshade: ["3L17"], + poisonsting: ["3L1"], + protect: ["3M"], + psychic: ["3M", "3L63"], + rest: ["3M"], + return: ["3M"], + scaryface: ["3L1"], + secretpower: ["3M"], + sludgebomb: ["3M"], + solarbeam: ["3M"], + spiderweb: ["3L43"], + stringshot: ["3L1"], + substitute: ["3T"], + sunnyday: ["3M"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + togepi: { + learnset: { + ancientpower: ["3L21"], + attract: ["3M"], + batonpass: ["3L41"], + bodyslam: ["3T"], + charm: ["3L1"], + counter: ["3T"], + doubleedge: ["3T", "3L37"], + doubleteam: ["3M"], + dreameater: ["3T"], + encore: ["3L17"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + followme: ["3L25"], + frustration: ["3M"], + futuresight: ["3E"], + growl: ["3L1"], + hiddenpower: ["3M"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T", "3L4"], + mimic: ["3T"], + mirrormove: ["3E"], + peck: ["3E"], + present: ["3E"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + safeguard: ["3M", "3L33"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + softboiled: ["3T"], + solarbeam: ["3M"], + substitute: ["3T", "3E"], + sunnyday: ["3M"], + sweetkiss: ["3L9"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + wish: ["3L29"], + yawn: ["3L13"], + }, + }, + togetic: { + learnset: { + aerialace: ["3M"], + ancientpower: ["3L21"], + attract: ["3M"], + batonpass: ["3L41"], + bodyslam: ["3T"], + brickbreak: ["3M"], + charm: ["3L1"], + counter: ["3T"], + doubleedge: ["3T", "3L37"], + doubleteam: ["3M"], + dreameater: ["3T"], + encore: ["3L17"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + flash: ["3M"], + fly: ["3M"], + focuspunch: ["3M"], + followme: ["3L25"], + frustration: ["3M"], + growl: ["3L1"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + lightscreen: ["3M"], + magicalleaf: ["3L1"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T", "3L1"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + safeguard: ["3M", "3L33"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + softboiled: ["3T"], + solarbeam: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + sweetkiss: ["3L1"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + wish: ["3L29"], + yawn: ["3L13"], + }, + }, + natu: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + calmmind: ["3M"], + confuseray: ["3L40"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + drillpeck: ["3E"], + facade: ["3M"], + featherdance: ["3E"], + feintattack: ["3E"], + flash: ["3M"], + frustration: ["3M"], + futuresight: ["3L30"], + gigadrain: ["3M"], + haze: ["3E"], + hiddenpower: ["3M"], + leer: ["3L1"], + lightscreen: ["3M"], + mimic: ["3T"], + nightshade: ["3L10"], + peck: ["3L1"], + protect: ["3M"], + psychic: ["3M", "3L50"], + quickattack: ["3E"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + shadowball: ["3M"], + skillswap: ["3M"], + solarbeam: ["3M"], + steelwing: ["3M", "3E"], + substitute: ["3T"], + sunnyday: ["3M"], + teleport: ["3L20"], + thief: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + wish: ["3L30"], + }, + }, + xatu: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + calmmind: ["3M"], + confuseray: ["3L50"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + fly: ["3M"], + frustration: ["3M"], + futuresight: ["3L35"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + leer: ["3L1"], + lightscreen: ["3M"], + mimic: ["3T"], + nightshade: ["3L10"], + peck: ["3L1"], + protect: ["3M"], + psychic: ["3M", "3L65"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + shadowball: ["3M"], + skillswap: ["3M"], + solarbeam: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + teleport: ["3L20"], + thief: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + wish: ["3L35"], + }, + }, + azurill: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + bubble: ["3L10"], + charm: ["3L3"], + doubleedge: ["3T"], + doubleteam: ["3M"], + encore: ["3E"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + refresh: ["3E"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + sing: ["3E"], + slam: ["3L15", "3E"], + splash: ["3L1"], + substitute: ["3T"], + surf: ["3M"], + tailwhip: ["3L6"], + tickle: ["3E"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L21"], + waterpulse: ["3M"], + }, + }, + marill: { + learnset: { + amnesia: ["3E"], + attract: ["3M"], + bellydrum: ["3E"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bubblebeam: ["3L21"], + defensecurl: ["3T", "3L3"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T", "3L28"], + doubleteam: ["3M"], + facade: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L45"], + icebeam: ["3M"], + irontail: ["3M"], + lightscreen: ["3E"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + perishsong: ["3E"], + present: ["3E"], + protect: ["3M"], + raindance: ["3M", "3L36"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rollout: ["3T", "3L15"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T", "3E"], + supersonic: ["3E"], + surf: ["3M"], + tackle: ["3L1"], + tailwhip: ["3L6"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L10"], + waterpulse: ["3M"], + }, + }, + azumarill: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + bubblebeam: ["3L24"], + defensecurl: ["3T", "3L1"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T", "3L34"], + doubleteam: ["3M"], + facade: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L57"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M", "3L45"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rollout: ["3T", "3L15"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + tackle: ["3L1"], + tailwhip: ["3L1"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + }, + }, + hoppip: { + learnset: { + aerialace: ["3M"], + amnesia: ["3E"], + attract: ["3M"], + bulletseed: ["3M"], + confusion: ["3E"], + cottonspore: ["3L25"], + doubleedge: ["3T", "3E"], + doubleteam: ["3M"], + encore: ["3E"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + leechseed: ["3L20"], + megadrain: ["3L30"], + mimic: ["3T"], + poisonpowder: ["3L13"], + protect: ["3M"], + reflect: ["3E"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + sleeppowder: ["3L17"], + solarbeam: ["3M"], + splash: ["3L1"], + stunspore: ["3L15"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + synthesis: ["3L5"], + tackle: ["3L10"], + tailwhip: ["3L5"], + toxic: ["3M"], + }, + }, + skiploom: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bulletseed: ["3M"], + cottonspore: ["3L29"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + leechseed: ["3L22"], + megadrain: ["3L36"], + mimic: ["3T"], + poisonpowder: ["3L13"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + sleeppowder: ["3L17"], + solarbeam: ["3M"], + splash: ["3L1"], + stunspore: ["3L15"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + synthesis: ["3L1"], + tackle: ["3L1"], + tailwhip: ["3L1"], + toxic: ["3M"], + }, + }, + jumpluff: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bulletseed: ["3M"], + cottonspore: ["3L33"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + leechseed: ["3L22"], + megadrain: ["3L44"], + mimic: ["3T"], + poisonpowder: ["3L13"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + sleeppowder: ["3L17"], + solarbeam: ["3M"], + splash: ["3L1"], + stunspore: ["3L15"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + synthesis: ["3L1"], + tackle: ["3L1"], + tailwhip: ["3L1"], + toxic: ["3M"], + }, + }, + yanma: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + detect: ["3L25"], + doubleedge: ["3T"], + doubleteam: ["3M", "3L12"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + foresight: ["3L1"], + frustration: ["3M"], + gigadrain: ["3M"], + hiddenpower: ["3M"], + hypnosis: ["3L23"], + leechlife: ["3E"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + quickattack: ["3L6"], + rest: ["3M"], + return: ["3M"], + reversal: ["3E"], + screech: ["3L49"], + secretpower: ["3M"], + shadowball: ["3M"], + silverwind: ["3E"], + solarbeam: ["3M"], + sonicboom: ["3L17"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3L31"], + tackle: ["3L1"], + thief: ["3M"], + toxic: ["3M"], + uproar: ["3L34"], + whirlwind: ["3E"], + wingattack: ["3L39"], + }, + }, + wooper: { + learnset: { + amnesia: ["3L21"], + ancientpower: ["3E"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T", "3E"], + curse: ["3E"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M", "3L36"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hail: ["3M"], + haze: ["3L51"], + hiddenpower: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + mist: ["3L51"], + mudshot: ["3L16"], + protect: ["3M"], + raindance: ["3M", "3L41"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + safeguard: ["3E"], + sandstorm: ["3M"], + secretpower: ["3M"], + slam: ["3L11"], + sludgebomb: ["3M"], + spitup: ["3E"], + stockpile: ["3E"], + substitute: ["3T"], + surf: ["3M"], + swallow: ["3E"], + tailwhip: ["3L1"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + yawn: ["3L31"], + }, + }, + quagsire: { + learnset: { + amnesia: ["3L23"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M", "3L42"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + haze: ["3L61"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mist: ["3L61"], + mudshot: ["3L16"], + protect: ["3M"], + raindance: ["3M", "3L49"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + slam: ["3L11"], + sludgebomb: ["3M"], + strength: ["3M"], + substitute: ["3T"], + surf: ["3M"], + tailwhip: ["3L1"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + yawn: ["3L35"], + }, + }, + murkrow: { + learnset: { + aerialace: ["3M"], + astonish: ["3L9"], + attract: ["3M"], + calmmind: ["3M"], + confuseray: ["3E"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + drillpeck: ["3E"], + facade: ["3M"], + featherdance: ["3E"], + feintattack: ["3L35"], + fly: ["3M"], + frustration: ["3M"], + haze: ["3L22"], + hiddenpower: ["3M"], + meanlook: ["3L48"], + mimic: ["3T"], + mirrormove: ["3E"], + nightshade: ["3L27"], + peck: ["3L1"], + protect: ["3M"], + pursuit: ["3L14"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + shadowball: ["3M"], + snatch: ["3M"], + steelwing: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M", "3L40"], + thief: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + whirlwind: ["3E"], + wingattack: ["3E"], + }, + }, + misdreavus: { + learnset: { + aerialace: ["3M"], + astonish: ["3L11"], + attract: ["3M"], + calmmind: ["3M"], + confuseray: ["3L17"], + destinybond: ["3E"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + growl: ["3L1"], + grudge: ["3L53"], + hiddenpower: ["3M"], + meanlook: ["3L23"], + mimic: ["3T"], + painsplit: ["3L37"], + perishsong: ["3L45"], + protect: ["3M"], + psybeam: ["3L30"], + psychic: ["3M"], + psywave: ["3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + screech: ["3E"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + skillswap: ["3M"], + snatch: ["3M"], + spite: ["3L6"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + unown: { + learnset: { + hiddenpower: ["3L1"], + }, + encounters: [ + {generation: 3, level: 25}, + ], + }, + wynaut: { + learnset: { + charm: ["3L1"], + counter: ["3L15"], + destinybond: ["3L15"], + encore: ["3L1"], + mirrorcoat: ["3L15"], + safeguard: ["3L15"], + splash: ["3L1"], + }, + }, + wobbuffet: { + learnset: { + counter: ["3L1"], + destinybond: ["3L1"], + mirrorcoat: ["3L1"], + safeguard: ["3L1"], + }, + }, + dunsparce: { + learnset: { + ancientpower: ["3E"], + attract: ["3M"], + bite: ["3E"], + blizzard: ["3M"], + bodyslam: ["3T"], + calmmind: ["3M"], + counter: ["3T"], + curse: ["3E"], + defensecurl: ["3T", "3L4"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + earthquake: ["3M"], + endeavor: ["3L41"], + facade: ["3M"], + fireblast: ["3M"], + flail: ["3L44"], + flamethrower: ["3M"], + frustration: ["3M"], + glare: ["3L14"], + headbutt: ["3E"], + hiddenpower: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + protect: ["3M"], + pursuit: ["3L24"], + rage: ["3L1"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rocktomb: ["3M"], + rollout: ["3T", "3L21"], + screech: ["3L31"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + solarbeam: ["3M"], + spite: ["3L21"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + takedown: ["3L34"], + thief: ["3M"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterpulse: ["3M"], + yawn: ["3L11"], + }, + }, + qwilfish: { + learnset: { + attract: ["3M"], + blizzard: ["3M"], + bubblebeam: ["3E"], + destinybond: ["3L45"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flail: ["3E"], + frustration: ["3M"], + hail: ["3M"], + harden: ["3L9"], + haze: ["3E"], + hiddenpower: ["3M"], + hydropump: ["3L37"], + icebeam: ["3M"], + mimic: ["3T"], + minimize: ["3L9"], + pinmissile: ["3L21"], + poisonsting: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + revenge: ["3L25"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + sludgebomb: ["3M"], + spikes: ["3L1"], + substitute: ["3T"], + supersonic: ["3E"], + surf: ["3M"], + swordsdance: ["3T"], + tackle: ["3L1"], + takedown: ["3L33"], + thunderwave: ["3T"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L13"], + waterpulse: ["3M"], + }, + }, + heracross: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M", "3L23"], + bulkup: ["3M"], + counter: ["3T", "3L30"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + endure: ["3T", "3L11"], + facade: ["3M"], + falseswipe: ["3E"], + focuspunch: ["3M"], + frustration: ["3M"], + furyattack: ["3L17"], + harden: ["3E"], + hiddenpower: ["3M"], + hornattack: ["3L6"], + hyperbeam: ["3M"], + leer: ["3L1"], + megahorn: ["3L53"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + reversal: ["3L45"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swordsdance: ["3T"], + tackle: ["3L1"], + takedown: ["3L37"], + thief: ["3M"], + toxic: ["3M"], + }, + }, + sneasel: { + learnset: { + aerialace: ["3M"], + agility: ["3L36"], + attract: ["3M"], + beatup: ["3L57"], + bite: ["3E"], + blizzard: ["3M"], + brickbreak: ["3M"], + calmmind: ["3M"], + counter: ["3T", "3E"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + facade: ["3M"], + fakeout: ["3E"], + feintattack: ["3L22"], + focuspunch: ["3M"], + frustration: ["3M"], + furyswipes: ["3L29"], + hail: ["3M"], + hiddenpower: ["3M"], + icebeam: ["3M"], + icywind: ["3T", "3L43"], + irontail: ["3M"], + leer: ["3L1"], + metalclaw: ["3L64"], + mimic: ["3T"], + protect: ["3M"], + quickattack: ["3L8"], + raindance: ["3M"], + reflect: ["3E"], + rest: ["3M"], + return: ["3M"], + rocksmash: ["3M"], + scratch: ["3L1"], + screech: ["3L15"], + secretpower: ["3M"], + shadowball: ["3M"], + slash: ["3L50"], + snatch: ["3M"], + spite: ["3E"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + swordsdance: ["3T"], + taunt: ["3M", "3L1"], + thief: ["3M"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + slugma: { + learnset: { + acidarmor: ["3E"], + amnesia: ["3L29"], + attract: ["3M"], + bodyslam: ["3T", "3L50"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L8"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M", "3L36"], + frustration: ["3M"], + harden: ["3L22"], + hiddenpower: ["3M"], + lightscreen: ["3M"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3L43"], + rocksmash: ["3M"], + rockthrow: ["3L15"], + secretpower: ["3M"], + smog: ["3L1"], + substitute: ["3T"], + sunnyday: ["3M"], + toxic: ["3M"], + yawn: ["3L1"], + }, + }, + magcargo: { + learnset: { + amnesia: ["3L29"], + attract: ["3M"], + bodyslam: ["3T", "3L60"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + ember: ["3L1"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M", "3L36"], + frustration: ["3M"], + harden: ["3L22"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + lightscreen: ["3M"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3L48"], + rocksmash: ["3M"], + rockthrow: ["3L1"], + rocktomb: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + smog: ["3L1"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + toxic: ["3M"], + yawn: ["3L1"], + }, + encounters: [ + {generation: 3, level: 25}, + ], + }, + swinub: { + learnset: { + amnesia: ["3L55"], + ancientpower: ["3E"], + attract: ["3M"], + bite: ["3E"], + blizzard: ["3M", "3L46"], + bodyslam: ["3T", "3E"], + dig: ["3M"], + doubleedge: ["3T", "3E"], + doubleteam: ["3M"], + earthquake: ["3M"], + endure: ["3T", "3L19"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + icebeam: ["3M"], + lightscreen: ["3M"], + mimic: ["3T"], + mist: ["3L37"], + mudshot: ["3E"], + odorsleuth: ["3L1"], + powdersnow: ["3L10"], + protect: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T", "3E"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + strength: ["3M"], + substitute: ["3T"], + tackle: ["3L1"], + takedown: ["3L28", "3E"], + toxic: ["3M"], + }, + }, + piloswine: { + learnset: { + amnesia: ["3L70"], + attract: ["3M"], + blizzard: ["3M", "3L56"], + bodyslam: ["3T"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + endure: ["3T", "3L1"], + facade: ["3M"], + frustration: ["3M"], + furyattack: ["3L33"], + hail: ["3M"], + hiddenpower: ["3M"], + hornattack: ["3L1"], + hyperbeam: ["3M"], + icebeam: ["3M"], + lightscreen: ["3M"], + mimic: ["3T"], + mist: ["3L42"], + odorsleuth: ["3L1"], + powdersnow: ["3L1"], + protect: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + strength: ["3M"], + substitute: ["3T"], + takedown: ["3L28"], + toxic: ["3M"], + }, + }, + remoraid: { + learnset: { + attract: ["3M"], + aurorabeam: ["3L22", "3E"], + blizzard: ["3M"], + bubblebeam: ["3L22"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focusenergy: ["3L33"], + frustration: ["3M"], + haze: ["3E"], + hiddenpower: ["3M"], + hyperbeam: ["3M", "3L55"], + icebeam: ["3M", "3L44"], + lockon: ["3L11"], + mimic: ["3T"], + octazooka: ["3E"], + protect: ["3M"], + psybeam: ["3L22"], + psychic: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + screech: ["3E"], + secretpower: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + supersonic: ["3E"], + surf: ["3M"], + thief: ["3M"], + thunderwave: ["3T", "3E"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + }, + }, + octillery: { + learnset: { + attract: ["3M"], + aurorabeam: ["3L22"], + blizzard: ["3M"], + bubblebeam: ["3L22"], + bulletseed: ["3M"], + constrict: ["3L11"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focusenergy: ["3L38"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M", "3L70"], + icebeam: ["3M", "3L54"], + mimic: ["3T"], + octazooka: ["3L25"], + protect: ["3M"], + psybeam: ["3L22"], + psychic: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + sludgebomb: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + thief: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterfall: ["3M"], + watergun: ["3L1"], + waterpulse: ["3M"], + }, + }, + delibird: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + aurorabeam: ["3E"], + blizzard: ["3M"], + bodyslam: ["3T"], + counter: ["3T"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + fly: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hail: ["3M"], + hiddenpower: ["3M"], + icebeam: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + present: ["3L1"], + protect: ["3M"], + quickattack: ["3E"], + raindance: ["3M"], + rapidspin: ["3E"], + rest: ["3M"], + return: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + splash: ["3E"], + substitute: ["3T"], + thief: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + mantine: { + learnset: { + aerialace: ["3M"], + agility: ["3L29"], + attract: ["3M"], + blizzard: ["3M"], + bodyslam: ["3T"], + bubble: ["3L1"], + bubblebeam: ["3L15"], + confuseray: ["3L50"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M"], + facade: ["3M"], + frustration: ["3M"], + hail: ["3M"], + haze: ["3E"], + hiddenpower: ["3M"], + hydropump: ["3E"], + icebeam: ["3M"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3E"], + secretpower: ["3M"], + slam: ["3E"], + substitute: ["3T"], + supersonic: ["3L8"], + surf: ["3M"], + tackle: ["3L1"], + takedown: ["3L22"], + toxic: ["3M"], + twister: ["3E"], + waterfall: ["3M"], + waterpulse: ["3M", "3L43"], + wingattack: ["3L36"], + }, + }, + skarmory: { + learnset: { + aerialace: ["3M"], + agility: ["3L16"], + aircutter: ["3L29"], + attract: ["3M"], + counter: ["3T"], + curse: ["3E"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + drillpeck: ["3E"], + facade: ["3M"], + fly: ["3M"], + frustration: ["3M"], + furyattack: ["3L26"], + hiddenpower: ["3M"], + leer: ["3L1"], + metalsound: ["3L45"], + mimic: ["3T"], + peck: ["3L1"], + protect: ["3M"], + pursuit: ["3E"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + sandattack: ["3L10"], + sandstorm: ["3M"], + secretpower: ["3M"], + spikes: ["3L42"], + steelwing: ["3M", "3L32"], + substitute: ["3T"], + sunnyday: ["3M"], + swift: ["3T", "3L13"], + taunt: ["3M"], + thief: ["3M"], + torment: ["3M"], + toxic: ["3M"], + whirlwind: ["3E"], + }, + }, + phanpy: { + learnset: { + ancientpower: ["3E"], + attract: ["3M"], + bodyslam: ["3T", "3E"], + counter: ["3T", "3E"], + defensecurl: ["3T", "3L9"], + doubleedge: ["3T", "3L49"], + doubleteam: ["3M"], + earthquake: ["3M"], + endure: ["3T", "3L41"], + facade: ["3M"], + fissure: ["3E"], + flail: ["3L17"], + focusenergy: ["3E"], + frustration: ["3M"], + growl: ["3L1"], + hiddenpower: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + odorsleuth: ["3L1"], + protect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + rocktomb: ["3M"], + rollout: ["3T", "3L33"], + sandstorm: ["3M"], + secretpower: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + tackle: ["3L1"], + takedown: ["3L25"], + toxic: ["3M"], + }, + }, + donphan: { + learnset: { + attract: ["3M"], + bodyslam: ["3T"], + counter: ["3T"], + defensecurl: ["3T", "3L9"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M", "3L49"], + facade: ["3M"], + flail: ["3L17"], + frustration: ["3M"], + furyattack: ["3L25"], + growl: ["3L1"], + hiddenpower: ["3M"], + hornattack: ["3L1"], + hyperbeam: ["3M"], + irontail: ["3M"], + mimic: ["3T"], + odorsleuth: ["3L1"], + protect: ["3M"], + rapidspin: ["3L41"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + rollout: ["3T", "3L33"], + sandstorm: ["3M"], + secretpower: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + toxic: ["3M"], + }, + }, + raikou: { + learnset: { + bite: ["3L1"], + bodyslam: ["3T"], + calmmind: ["3M", "3L81"], + crunch: ["3L61"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + protect: ["3M"], + quickattack: ["3L31"], + raindance: ["3M"], + reflect: ["3M", "3L51"], + rest: ["3M"], + return: ["3M"], + roar: ["3M", "3L21"], + rocksmash: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + shockwave: ["3M"], + spark: ["3L41"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + thunder: ["3M", "3L71"], + thunderbolt: ["3M"], + thundershock: ["3L11"], + thunderwave: ["3T"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 40}, + ], + }, + entei: { + learnset: { + bite: ["3L1"], + bodyslam: ["3T"], + calmmind: ["3M", "3L81"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + ember: ["3L11"], + facade: ["3M"], + fireblast: ["3M", "3L71"], + firespin: ["3L31"], + flamethrower: ["3M", "3L51"], + flash: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M", "3L21"], + rocksmash: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + solarbeam: ["3M"], + stomp: ["3L41"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + swagger: ["3T", "3L61"], + toxic: ["3M"], + }, + encounters: [ + {generation: 3, level: 40}, + ], + }, + suicune: { + learnset: { + aurorabeam: ["3L41"], + bite: ["3L1"], + blizzard: ["3M"], + bodyslam: ["3T"], + bubblebeam: ["3L11"], + calmmind: ["3M", "3L81"], + cut: ["3M"], + dig: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + facade: ["3M"], + frustration: ["3M"], + gust: ["3L31"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L71"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + mimic: ["3T"], + mirrorcoat: ["3L61"], + mist: ["3L51"], + protect: ["3M"], + raindance: ["3M", "3L21"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + sandstorm: ["3M"], + secretpower: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + toxic: ["3M"], + waterfall: ["3M"], + waterpulse: ["3M"], + }, + encounters: [ + {generation: 3, level: 40}, + ], + }, + larvitar: { + learnset: { + attract: ["3M"], + bite: ["3L1"], + bodyslam: ["3T"], + brickbreak: ["3M"], + crunch: ["3L43"], + curse: ["3E"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragondance: ["3E"], + earthquake: ["3M", "3L50"], + facade: ["3M"], + focusenergy: ["3E"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M", "3L57"], + leer: ["3L1"], + mimic: ["3T"], + outrage: ["3E"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3L22"], + rocksmash: ["3M"], + sandstorm: ["3M", "3L8"], + scaryface: ["3L36"], + screech: ["3L15"], + secretpower: ["3M"], + stomp: ["3E"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + thrash: ["3L29"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + pupitar: { + learnset: { + attract: ["3M"], + bite: ["3L1"], + bodyslam: ["3T"], + brickbreak: ["3M"], + crunch: ["3L47"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + earthquake: ["3M", "3L56"], + facade: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M", "3L65"], + leer: ["3L1"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T", "3L22"], + rocksmash: ["3M"], + sandstorm: ["3M", "3L1"], + scaryface: ["3L38"], + screech: ["3L1"], + secretpower: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + thrash: ["3L29"], + torment: ["3M"], + toxic: ["3M"], + }, + }, + tyranitar: { + learnset: { + aerialace: ["3M"], + attract: ["3M"], + bite: ["3L1"], + blizzard: ["3M"], + bodyslam: ["3T"], + brickbreak: ["3M"], + counter: ["3T"], + crunch: ["3L47"], + cut: ["3M"], + dig: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dragonclaw: ["3M"], + earthquake: ["3M", "3L61"], + facade: ["3M"], + fireblast: ["3M"], + flamethrower: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M", "3L75"], + icebeam: ["3M"], + irontail: ["3M"], + leer: ["3L1"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + protect: ["3M"], + raindance: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rockslide: ["3T", "3L22"], + rocksmash: ["3M"], + rocktomb: ["3M"], + sandstorm: ["3M", "3L1"], + scaryface: ["3L38"], + screech: ["3L1"], + secretpower: ["3M"], + seismictoss: ["3T"], + shockwave: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + taunt: ["3M"], + thrash: ["3L29"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + }, + }, + lugia: { + learnset: { + aerialace: ["3M"], + aeroblast: ["3L77"], + ancientpower: ["3L88"], + blizzard: ["3M"], + bodyslam: ["3T"], + calmmind: ["3M"], + dive: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + earthquake: ["3M"], + facade: ["3M"], + fly: ["3M"], + frustration: ["3M"], + futuresight: ["3L99"], + gigadrain: ["3M"], + gust: ["3L22"], + hail: ["3M"], + hiddenpower: ["3M"], + hydropump: ["3L44"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irontail: ["3M"], + lightscreen: ["3M"], + mimic: ["3T"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M", "3L55"], + recover: ["3L33"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + safeguard: ["3M", "3L11"], + sandstorm: ["3M"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + skillswap: ["3M"], + steelwing: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + surf: ["3M"], + swift: ["3T", "3L66"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + waterfall: ["3M"], + waterpulse: ["3M"], + whirlwind: ["3L1"], + }, + }, + hooh: { + learnset: { + aerialace: ["3M"], + ancientpower: ["3L88"], + calmmind: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M"], + dreameater: ["3T"], + earthquake: ["3M"], + facade: ["3M"], + fireblast: ["3M", "3L44"], + flamethrower: ["3M"], + flash: ["3M"], + fly: ["3M"], + frustration: ["3M"], + futuresight: ["3L99"], + gigadrain: ["3M"], + gust: ["3L22"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + lightscreen: ["3M"], + mimic: ["3T"], + overheat: ["3M"], + protect: ["3M"], + psychic: ["3M"], + raindance: ["3M"], + recover: ["3L33"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + roar: ["3M"], + rocksmash: ["3M"], + sacredfire: ["3L77"], + safeguard: ["3M", "3L11"], + sandstorm: ["3M"], + secretpower: ["3M"], + shadowball: ["3M"], + shockwave: ["3M"], + solarbeam: ["3M"], + steelwing: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M", "3L55"], + swift: ["3T", "3L66"], + thunder: ["3M"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + toxic: ["3M"], + whirlwind: ["3L1"], + }, + }, + deoxysattack: { + learnset: { + aerialace: ["3M"], + agility: ["3L35"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + cosmicpower: ["3L35"], + counter: ["3T"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M", "3L10"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3L50", "3M"], + icebeam: ["3M"], + leer: ["3L1"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + nightshade: ["3L5"], + protect: ["3M"], + psychic: ["3M", "3L25"], + psychoboost: ["3L45"], + pursuit: ["3L20"], + raindance: ["3M"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + skillswap: ["3M"], + snatch: ["3M"], + solarbeam: ["3M"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + superpower: ["3L30"], + taunt: ["3L15", "3M"], + teleport: ["3L10"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + wrap: ["3L1"], + zapcannon: ["3L40"], + }, + }, + deoxysdefense: { + learnset: { + aerialace: ["3M"], + agility: ["3L35"], + amnesia: ["3L35"], + bodyslam: ["3T"], + brickbreak: ["3M"], + calmmind: ["3M"], + counter: ["3T", "3L50"], + cut: ["3M"], + doubleedge: ["3T"], + doubleteam: ["3M", "3L10"], + dreameater: ["3T"], + facade: ["3M"], + flash: ["3M"], + focuspunch: ["3M"], + frustration: ["3M"], + hiddenpower: ["3M"], + hyperbeam: ["3M"], + icebeam: ["3M"], + irondefense: ["3L35"], + knockoff: ["3L15"], + leer: ["3L1"], + lightscreen: ["3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mirrorcoat: ["3L50"], + nightshade: ["3L5"], + protect: ["3M"], + psychic: ["3M", "3L25"], + psychoboost: ["3L45"], + raindance: ["3M"], + recover: ["3L40"], + reflect: ["3M"], + rest: ["3M"], + return: ["3M"], + rockslide: ["3T"], + rocksmash: ["3M"], + rocktomb: ["3M"], + safeguard: ["3M"], + secretpower: ["3M"], + seismictoss: ["3T"], + shadowball: ["3M"], + shockwave: ["3M"], + skillswap: ["3M"], + snatch: ["3L30", "3M"], + solarbeam: ["3M"], + spikes: ["3L20"], + strength: ["3M"], + substitute: ["3T"], + sunnyday: ["3M"], + taunt: ["3M"], + teleport: ["3L10"], + thunderbolt: ["3M"], + thunderwave: ["3T"], + torment: ["3M"], + toxic: ["3M"], + waterpulse: ["3M"], + wrap: ["3L1"], + }, + }, +}; \ No newline at end of file diff --git a/data/mods/gen3frlg/rulesets.ts b/data/mods/gen3frlg/rulesets.ts new file mode 100644 index 0000000000..0dec9020f9 --- /dev/null +++ b/data/mods/gen3frlg/rulesets.ts @@ -0,0 +1,40 @@ +export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { + standard: { + effectType: 'ValidatorRule', + name: 'Standard', + desc: "The standard ruleset for all official Smogon singles tiers (Ubers, OU, etc.)", + ruleset: [ + 'Standard AG', + 'Sleep Clause Mod', 'Switch Priority Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause', + ], + }, + standarddraft: { + effectType: 'ValidatorRule', + name: 'Standard Draft', + desc: "The custom Draft League ruleset", + ruleset: [ + 'Obtainable', 'Nickname Clause', 'Beat Up Nicknames Mod', '+Unreleased', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', + 'One Boost Passer Clause', 'Freeze Clause Mod', 'Accuracy Moves Clause', 'Baton Pass Trap Clause', + ], + banlist: [ + 'Uber', 'Smeargle + Ingrain', 'Swagger', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Baton Pass + Ancient Power', 'Baton Pass + Silver Wind', + ], + // timer: {starting: 60 * 60, grace: 0, addPerTurn: 10, maxPerTurn: 100, timeoutAutoChoose: true}, + }, + obtainable: { + inherit: true, + onValidateSet(set) { + const species = this.dex.species.get(set.species); + if (['entei', 'raikou', 'suicune'].includes(species.id)) { + if (!set.ivs) set.ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 }; + for (const stat in set.ivs) { + if ((stat === 'atk' && set.ivs[stat] > 7) || (stat !== 'hp' && set.ivs[stat as 'def'] > 0)) { + return [ + `${set.name} must have 7 or fewer Attack IVs and 0 IVs in all other stats except HP, due to the Roaming IVs glitch.`, + ]; + } + } + } + }, + }, +}; diff --git a/data/mods/gen3frlg/scripts.ts b/data/mods/gen3frlg/scripts.ts new file mode 100644 index 0000000000..bc67cbbb16 --- /dev/null +++ b/data/mods/gen3frlg/scripts.ts @@ -0,0 +1,3 @@ +export const Scripts: ModdedBattleScriptsData = { + inherit: 'gen3', +}; diff --git a/data/mods/gen3rs/abilities.ts b/data/mods/gen3rs/abilities.ts new file mode 100644 index 0000000000..adfe8653b3 --- /dev/null +++ b/data/mods/gen3rs/abilities.ts @@ -0,0 +1,63 @@ +function attemptStatuses(battle: Battle, target: Pokemon, source: Pokemon, move: ActiveMove, status: string) { + const attackerStatused = source.trySetStatus(status, target); + if (move.multihit && move.id !== 'triplekick' && + (move.lastHit || (attackerStatused && status === 'slp')) && + battle.randomChance(1, 100)) { + const defenderStatused = target.trySetStatus(status, target, move); + if (defenderStatused) { + battle.hint("In Pokemon Ruby, Sapphire, FireRed, LeafGreen, and Colosseum, if the final hit of a multihit move (except for Triple Kick) that makes contact triggers an ability that inflicts status, then there is a 1% chance that the defender is afflicted by the same status."); + } + } +} + +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + effectspore: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (damage && move.flags['contact'] && !source.status) { + const r = this.random(300); + let status = null; + if (r < 10) { + status = 'slp'; + } else if (r < 20) { + status = 'par'; + } else if (r < 30) { + status = 'psn'; + } + if (status) { + attemptStatuses(this, target, source, move, status); + } + } + }, + }, + flamebody: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (damage && move.flags['contact']) { + if (this.randomChance(1, 3)) { + attemptStatuses(this, target, source, move, 'brn'); + } + } + }, + }, + poisonpoint: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (damage && move.flags['contact']) { + if (this.randomChance(1, 3)) { + attemptStatuses(this, target, source, move, 'psn'); + } + } + }, + }, + static: { + inherit: true, + onDamagingHit(damage, target, source, move) { + if (damage && move.flags['contact']) { + if (this.randomChance(1, 3)) { + attemptStatuses(this, target, source, move, 'par'); + } + } + }, + }, +}; diff --git a/data/mods/gen4/abilities.ts b/data/mods/gen4/abilities.ts index beebdc46e4..b4af06f005 100644 --- a/data/mods/gen4/abilities.ts +++ b/data/mods/gen4/abilities.ts @@ -86,15 +86,9 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa effectspore: { inherit: true, onDamagingHit(damage, target, source, move) { - if (damage && move.flags['contact'] && !source.status) { - const r = this.random(100); - if (r < 10) { - source.setStatus('slp', target); - } else if (r < 20) { - source.setStatus('par', target); - } else if (r < 30) { - source.setStatus('psn', target); - } + if (damage && move.flags['contact'] && this.randomChance(3, 10)) { + const status = this.sample(['slp', 'par', 'psn']); + source.trySetStatus(status, target); } }, }, @@ -303,6 +297,11 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa } }, }, + multitype: { + inherit: true, + onTakeItem: false, + onSetAbility: false, // redundant but hardcoded + }, naturalcure: { inherit: true, onCheckShow: undefined, // no inherit @@ -432,6 +431,13 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa onResidualOrder: 10, onResidualSubOrder: 3, }, + stall: { + inherit: true, + onFractionalPriority(priority, pokemon) { + // don't override Lagging Tail and Full Incense's -0.2 fractional priority + if (priority >= 0) return -0.1; + }, + }, static: { inherit: true, onDamagingHit(damage, target, source, move) { @@ -531,10 +537,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa const target = pokemon.side.randomFoe(); if (!target || target.fainted) return; const ability = target.getAbility(); - const bannedAbilities = ['forecast', 'multitype', 'trace']; - if (bannedAbilities.includes(target.ability)) { - return; - } + if (ability.flags['notrace']) return; pokemon.setAbility(ability, target); }, flags: { notrace: 1 }, diff --git a/data/mods/gen4/formats-data.ts b/data/mods/gen4/formats-data.ts index 2ceaa1acc7..a5c3fa7407 100644 --- a/data/mods/gen4/formats-data.ts +++ b/data/mods/gen4/formats-data.ts @@ -33,7 +33,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, butterfree: { - tier: "NU", + tier: "ZU", }, weedle: { tier: "LC", @@ -42,7 +42,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, beedrill: { - tier: "NU", + tier: "ZU", }, pidgey: { tier: "LC", @@ -51,37 +51,37 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, pidgeot: { - tier: "NU", + tier: "ZU", }, rattata: { tier: "LC", }, raticate: { - tier: "NU", + tier: "ZU", }, spearow: { tier: "LC", }, fearow: { - tier: "NU", + tier: "ZU", }, ekans: { tier: "LC", }, arbok: { - tier: "NU", + tier: "ZU", }, pichu: { tier: "LC", }, pichuspikyeared: { - tier: "NU", + tier: "ZU", }, pikachu: { - tier: "NU", + tier: "ZU", }, raichu: { - tier: "NU", + tier: "ZUBL", }, sandshrew: { tier: "LC", @@ -129,13 +129,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, wigglytuff: { - tier: "NU", + tier: "ZU", }, zubat: { tier: "LC", }, golbat: { - tier: "NU", + tier: "ZU", }, crobat: { tier: "UUBL", @@ -150,13 +150,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NU", }, bellossom: { - tier: "NU", + tier: "PU", }, paras: { tier: "LC", }, parasect: { - tier: "NU", + tier: "ZU", }, venonat: { tier: "LC", @@ -165,7 +165,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NU", }, diglett: { - tier: "NU", + tier: "ZU", }, dugtrio: { tier: "UU", @@ -174,13 +174,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, persian: { - tier: "NU", + tier: "ZU", }, psyduck: { tier: "LC", }, golduck: { - tier: "NU", + tier: "PU", }, mankey: { tier: "LC", @@ -204,13 +204,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NU", }, politoed: { - tier: "NU", + tier: "PU", }, abra: { tier: "LC", }, kadabra: { - tier: "NU", + tier: "PU", }, alakazam: { tier: "UU", @@ -219,7 +219,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, machoke: { - tier: "NU", + tier: "PU", }, machamp: { tier: "Uber", @@ -231,7 +231,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, victreebel: { - tier: "NU", + tier: "PU", }, tentacool: { tier: "LC", @@ -252,7 +252,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, rapidash: { - tier: "NU", + tier: "PU", }, slowpoke: { tier: "LC", @@ -273,7 +273,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "OU", }, farfetchd: { - tier: "NU", + tier: "ZU", }, doduo: { tier: "LC", @@ -285,13 +285,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, dewgong: { - tier: "NU", + tier: "ZU", }, grimer: { tier: "LC", }, muk: { - tier: "NU", + tier: "PU", }, shellder: { tier: "LC", @@ -324,7 +324,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, kingler: { - tier: "NU", + tier: "ZUBL", }, voltorb: { tier: "LC", @@ -342,7 +342,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, marowak: { - tier: "NU", + tier: "ZUBL", }, tyrogue: { tier: "LC", @@ -372,7 +372,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, rhydon: { - tier: "NFE", + tier: "PU", }, rhyperior: { tier: "UU", @@ -387,7 +387,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "OU", }, tangela: { - tier: "NU", + tier: "PU", }, tangrowth: { tier: "UU", @@ -408,7 +408,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, seaking: { - tier: "NU", + tier: "ZU", }, staryu: { tier: "LC", @@ -420,7 +420,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, mrmime: { - tier: "NU", + tier: "PU", }, scyther: { tier: "UU", @@ -438,7 +438,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, electabuzz: { - tier: "NU", + tier: "ZUBL", }, electivire: { tier: "(OU)", @@ -447,13 +447,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, magmar: { - tier: "NFE", + tier: "PU", }, magmortar: { tier: "NU", }, pinsir: { - tier: "NU", + tier: "PU", }, tauros: { tier: "NU", @@ -465,10 +465,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "OU", }, lapras: { - tier: "NU", + tier: "ZUBL", }, ditto: { - tier: "NU", + tier: "ZU", }, eevee: { tier: "LC", @@ -480,7 +480,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "(OU)", }, flareon: { - tier: "NU", + tier: "ZU", }, espeon: { tier: "NUBL", @@ -492,7 +492,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "UU", }, glaceon: { - tier: "NU", + tier: "PU", }, porygon: { tier: "LC", @@ -525,7 +525,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "(OU)", }, articuno: { - tier: "NU", + tier: "PUBL", }, zapdos: { tier: "OU", @@ -537,7 +537,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, dragonair: { - tier: "NU", + tier: "PU", }, dragonite: { tier: "OU", @@ -579,25 +579,25 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, furret: { - tier: "NU", + tier: "ZU", }, hoothoot: { tier: "LC", }, noctowl: { - tier: "NU", + tier: "ZU", }, ledyba: { tier: "LC", }, ledian: { - tier: "NU", + tier: "ZU", }, spinarak: { tier: "LC", }, ariados: { - tier: "NU", + tier: "ZU", }, chinchou: { tier: "LC", @@ -609,7 +609,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, togetic: { - tier: "NU", + tier: "ZU", }, togekiss: { tier: "(OU)", @@ -618,7 +618,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, xatu: { - tier: "NU", + tier: "PU", }, mareep: { tier: "LC", @@ -627,7 +627,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, ampharos: { - tier: "NU", + tier: "PU", }, azurill: { tier: "LC", @@ -642,7 +642,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, sudowoodo: { - tier: "NU", + tier: "ZU", }, hoppip: { tier: "LC", @@ -663,10 +663,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, sunflora: { - tier: "NU", + tier: "ZU", }, yanma: { - tier: "NU", + tier: "ZU", }, yanmega: { tier: "UUBL", @@ -675,22 +675,22 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, quagsire: { - tier: "NU", + tier: "PU", }, murkrow: { - tier: "NU", + tier: "PU", }, honchkrow: { tier: "UUBL", }, misdreavus: { - tier: "NU", + tier: "PU", }, mismagius: { tier: "UU", }, unown: { - tier: "NU", + tier: "ZU", }, wynaut: { tier: "Uber", @@ -699,7 +699,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "Uber", }, girafarig: { - tier: "NU", + tier: "ZU", }, pineco: { tier: "LC", @@ -708,7 +708,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "OU", }, dunsparce: { - tier: "NU", + tier: "ZU", }, gligar: { tier: "NU", @@ -721,19 +721,19 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, granbull: { - tier: "NU", + tier: "ZU", }, qwilfish: { tier: "UU", }, shuckle: { - tier: "NU", + tier: "ZU", }, heracross: { tier: "UUBL", }, sneasel: { - tier: "NU", + tier: "PU", }, weavile: { tier: "(OU)", @@ -748,7 +748,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, magcargo: { - tier: "NU", + tier: "ZU", }, swinub: { tier: "LC", @@ -760,22 +760,22 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "(OU)", }, corsola: { - tier: "NU", + tier: "ZU", }, remoraid: { tier: "LC", }, octillery: { - tier: "NU", + tier: "ZU", }, delibird: { - tier: "NU", + tier: "ZU", }, mantyke: { tier: "LC", }, mantine: { - tier: "NU", + tier: "PU", }, skarmory: { tier: "OU", @@ -793,7 +793,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "UU", }, stantler: { - tier: "NU", + tier: "ZU", }, smeargle: { tier: "(OU)", @@ -859,13 +859,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, mightyena: { - tier: "NU", + tier: "ZU", }, zigzagoon: { tier: "LC", }, linoone: { - tier: "NU", + tier: "PUBL", }, wurmple: { tier: "LC", @@ -874,13 +874,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, beautifly: { - tier: "NU", + tier: "ZU", }, cascoon: { tier: "NFE", }, dustox: { - tier: "NU", + tier: "ZU", }, lotad: { tier: "LC", @@ -910,7 +910,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, pelipper: { - tier: "NU", + tier: "ZU", }, ralts: { tier: "LC", @@ -928,7 +928,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, masquerain: { - tier: "NU", + tier: "ZU", }, shroomish: { tier: "LC", @@ -940,10 +940,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, vigoroth: { - tier: "NU", + tier: "ZU", }, slaking: { - tier: "NU", + tier: "ZU", }, nincada: { tier: "LC", @@ -952,7 +952,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "(OU)", }, shedinja: { - tier: "NU", + tier: "ZU", }, whismur: { tier: "LC", @@ -961,7 +961,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, exploud: { - tier: "NU", + tier: "ZU", }, makuhita: { tier: "LC", @@ -973,19 +973,19 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, probopass: { - tier: "NU", + tier: "ZU", }, skitty: { tier: "LC", }, delcatty: { - tier: "NU", + tier: "ZU", }, sableye: { - tier: "NU", + tier: "ZU", }, mawile: { - tier: "NU", + tier: "ZU", }, aron: { tier: "LC", @@ -1009,22 +1009,22 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NU", }, plusle: { - tier: "NU", + tier: "ZU", }, minun: { - tier: "NU", + tier: "ZU", }, volbeat: { - tier: "NU", + tier: "ZU", }, illumise: { - tier: "NU", + tier: "ZU", }, budew: { tier: "LC", }, roselia: { - tier: "NU", + tier: "PUBL", }, roserade: { tier: "OU", @@ -1033,7 +1033,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, swalot: { - tier: "NU", + tier: "ZU", }, carvanha: { tier: "LC", @@ -1045,16 +1045,16 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, wailord: { - tier: "NU", + tier: "ZU", }, numel: { tier: "LC", }, camerupt: { - tier: "NU", + tier: "ZU", }, torkoal: { - tier: "NU", + tier: "PU", }, spoink: { tier: "LC", @@ -1063,7 +1063,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NU", }, spinda: { - tier: "NU", + tier: "ZU", }, trapinch: { tier: "LC", @@ -1087,28 +1087,28 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "UU", }, zangoose: { - tier: "NU", + tier: "PU", }, seviper: { - tier: "NU", + tier: "ZU", }, lunatone: { - tier: "NU", + tier: "ZU", }, solrock: { - tier: "NU", + tier: "PU", }, barboach: { tier: "LC", }, whiscash: { - tier: "NU", + tier: "ZU", }, corphish: { tier: "LC", }, crawdaunt: { - tier: "NU", + tier: "ZU", }, baltoy: { tier: "LC", @@ -1126,7 +1126,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, armaldo: { - tier: "NU", + tier: "PU", }, feebas: { tier: "LC", @@ -1135,7 +1135,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "UU", }, castform: { - tier: "NU", + tier: "ZU", }, castformsunny: { }, @@ -1144,13 +1144,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat castformsnowy: { }, kecleon: { - tier: "NU", + tier: "ZU", }, shuppet: { tier: "LC", }, banette: { - tier: "NU", + tier: "ZU", }, duskull: { tier: "LC", @@ -1162,13 +1162,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "(OU)", }, tropius: { - tier: "NU", + tier: "ZU", }, chingling: { tier: "LC", }, chimecho: { - tier: "NU", + tier: "ZU", }, absol: { tier: "UU", @@ -1177,7 +1177,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, glalie: { - tier: "NU", + tier: "PU", }, froslass: { tier: "UUBL", @@ -1189,28 +1189,28 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, walrein: { - tier: "NU", + tier: "ZUBL", }, clamperl: { - tier: "NU", + tier: "ZU", }, huntail: { - tier: "NU", + tier: "ZU", }, gorebyss: { - tier: "NU", + tier: "ZUBL", }, relicanth: { - tier: "NU", + tier: "PU", }, luvdisc: { - tier: "NU", + tier: "ZU", }, bagon: { tier: "LC", }, shelgon: { - tier: "NU", + tier: "ZU", }, salamence: { tier: "Uber", @@ -1219,7 +1219,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, metang: { - tier: "NU", + tier: "PU", }, metagross: { tier: "OU", @@ -1276,7 +1276,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, monferno: { - tier: "NU", + tier: "PU", }, infernape: { tier: "OU", @@ -1303,13 +1303,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, bibarel: { - tier: "NU", + tier: "ZU", }, kricketot: { tier: "LC", }, kricketune: { - tier: "NU", + tier: "ZU", }, shinx: { tier: "LC", @@ -1318,43 +1318,43 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, luxray: { - tier: "NU", + tier: "ZU", }, cranidos: { tier: "LC", }, rampardos: { - tier: "NU", + tier: "ZUBL", }, shieldon: { tier: "LC", }, bastiodon: { - tier: "NU", + tier: "ZU", }, burmy: { tier: "LC", }, wormadam: { - tier: "NU", + tier: "ZU", }, wormadamsandy: { - tier: "NU", + tier: "ZU", }, wormadamtrash: { - tier: "NU", + tier: "ZU", }, mothim: { - tier: "NU", + tier: "ZU", }, combee: { tier: "LC", }, vespiquen: { - tier: "NU", + tier: "ZU", }, pachirisu: { - tier: "NU", + tier: "ZU", }, buizel: { tier: "LC", @@ -1366,7 +1366,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, cherrim: { - tier: "NU", + tier: "ZU", }, cherrimsunshine: { }, @@ -1374,7 +1374,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, gastrodon: { - tier: "NU", + tier: "PU", }, drifloon: { tier: "LC", @@ -1386,13 +1386,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, lopunny: { - tier: "NU", + tier: "ZU", }, glameow: { tier: "LC", }, purugly: { - tier: "NU", + tier: "PU", }, stunky: { tier: "LC", @@ -1401,13 +1401,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NU", }, bronzor: { - tier: "LC", + tier: "ZU", }, bronzong: { tier: "OU", }, chatot: { - tier: "NU", + tier: "ZU", }, spiritomb: { tier: "UU", @@ -1416,7 +1416,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, gabite: { - tier: "NU", + tier: "PU", }, garchomp: { tier: "Uber", @@ -1446,13 +1446,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "UU", }, carnivine: { - tier: "NU", + tier: "ZU", }, finneon: { tier: "LC", }, lumineon: { - tier: "NU", + tier: "ZU", }, snover: { tier: "NUBL", @@ -1497,7 +1497,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "OU", }, regigigas: { - tier: "NU", + tier: "PU", }, giratina: { tier: "Uber", @@ -1508,7 +1508,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "UUBL", }, phione: { - tier: "NU", + tier: "ZU", }, manaphy: { tier: "Uber", diff --git a/data/mods/gen4/items.ts b/data/mods/gen4/items.ts index 1f61b55399..bec40c7413 100644 --- a/data/mods/gen4/items.ts +++ b/data/mods/gen4/items.ts @@ -164,6 +164,11 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { }, }, }, + fullincense: { + inherit: true, + onFractionalPriorityPriority: 1, + onFractionalPriority: -0.2, + }, griseousorb: { inherit: true, onBasePower(basePower, user, target, move) { @@ -171,6 +176,8 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { return this.chainModify(1.2); } }, + onTakeItem: false, + onSetAbility: false, }, heavyball: { inherit: true, @@ -207,6 +214,11 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { } }, }, + laggingtail: { + inherit: true, + onFractionalPriorityPriority: 1, + onFractionalPriority: -0.2, + }, laxincense: { inherit: true, onModifyAccuracyPriority: 5, diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts index 9e0c836f58..795aa6e7c8 100644 --- a/data/mods/gen4/moves.ts +++ b/data/mods/gen4/moves.ts @@ -468,7 +468,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { inherit: true, onPrepareHit(target, source, move) { if (source.ignoringItem(true)) return false; - if (source.hasAbility('multitype')) return false; const item = source.getItem(); if (!this.singleEvent('TakeItem', item, source.itemState, source, source, move, item)) return false; if (!item.fling) return false; @@ -696,7 +695,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { inherit: true, onAfterHit(target, source, move) { if (!target.item) return; - if (target.ability === 'multitype') return; const item = target.getItem(); if (this.runEvent('TakeItem', target, source, move, item)) { target.item = ''; @@ -870,8 +868,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { source.moveSlots[mimicIndex] = { move: move.name, id: move.id, - pp: 5, - maxpp: move.pp * 8 / 5, + pp: Math.min(5, move.pp), + maxpp: this.calculatePP(move, source.ppUps[mimicIndex] || 0), disabled: false, used: false, virtual: true, @@ -1019,7 +1017,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { condition: { inherit: true, onTryHit(target, source, move) { - if (!move.flags['protect']) return; + if (this.checkMoveBypassesProtect(move, source, target)) return; this.add('-activate', target, 'Protect'); const lockedmove = source.getVolatile('lockedmove'); if (lockedmove) { @@ -1153,15 +1151,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { inherit: true, accuracy: 80, }, - roleplay: { - inherit: true, - onTryHit(target, source) { - if (target.ability === source.ability || source.hasItem('griseousorb')) return false; - if (target.getAbility().flags['failroleplay'] || source.ability === 'multitype') { - return false; - } - }, - }, safeguard: { inherit: true, condition: { @@ -1206,7 +1195,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { move: move.name, id: move.id, pp: move.pp, - maxpp: move.pp, + maxpp: this.calculatePP(move, source.ppUps[sketchIndex] || 0), disabled: false, used: false, }; @@ -1234,9 +1223,15 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { } snatchUser.removeVolatile('snatch'); this.add('-activate', snatchUser, 'move: Snatch', `[of] ${source}`); - if (this.actions.useMove(move.id, snatchUser)) { - snatchUser.deductPP('snatch'); + + // check Pressure + const ppDrop = this.runEvent('DeductPP', source, snatchUser, this.effectState.sourceEffect); + const extraPP = ppDrop !== true ? ppDrop : 0; + if (extraPP > 0) { + snatchUser.deductPP(this.effectState.sourceEffect.id, extraPP); } + + this.actions.useMove(move.id, snatchUser); return null; }, }, @@ -1339,13 +1334,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { return !!source.volatiles['stockpile']; }, }, - switcheroo: { - inherit: true, - onTryHit(target, source, move) { - if (target.itemKnockedOff || source.itemKnockedOff) return false; - if (target.hasAbility('multitype') || source.hasAbility('multitype')) return false; - }, - }, synthesis: { inherit: true, onHit(pokemon) { @@ -1456,13 +1444,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { inherit: true, flags: { bypasssub: 1, metronome: 1, failencore: 1 }, }, - trick: { - inherit: true, - onTryHit(target, source, move) { - if (target.itemKnockedOff || source.itemKnockedOff) return false; - if (target.hasAbility('multitype') || source.hasAbility('multitype')) return false; - }, - }, trickroom: { inherit: true, condition: { @@ -1531,15 +1512,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { inherit: true, recoil: [1, 3], }, - worryseed: { - inherit: true, - onTryHit(pokemon) { - const bannedAbilities = ['multitype', 'truant']; - if (bannedAbilities.includes(pokemon.ability) || pokemon.hasItem('griseousorb')) { - return false; - } - }, - }, wrap: { inherit: true, accuracy: 85, diff --git a/data/mods/gen4/rulesets.ts b/data/mods/gen4/rulesets.ts index 1a75078179..71359c6c5a 100644 --- a/data/mods/gen4/rulesets.ts +++ b/data/mods/gen4/rulesets.ts @@ -14,7 +14,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable }, flatrules: { inherit: true, - ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'Beat Up Nicknames Mod', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'], + ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'], }, teampreview: { inherit: true, @@ -30,26 +30,4 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable this.makeRequest('teampreview'); }, }, - validatestats: { - inherit: true, - onValidateSet(set) { - const species = this.dex.species.get(set.species); - const item = this.dex.items.get(set.item); - if (item && item.id === 'griseousorb' && species.num !== 487) { - return ['Griseous Orb can only be held by Giratina in Generation 4.']; - } - if (species.num === 493 && set.evs) { - const isEventArceus = set.moves.includes('roaroftime') || set.moves.includes('shadowforce') || - set.moves.includes('spacialrend'); - if (isEventArceus) { - let stat: StatID; - for (stat in set.evs) { - if (set.evs[stat] > 100) { - return ["Event Arceus may not have more than 100 of any EVs in Generation 4."]; - } - } - } - } - }, - }, }; diff --git a/data/mods/gen4/scripts.ts b/data/mods/gen4/scripts.ts index 0a829776cc..2fc269a6c0 100644 --- a/data/mods/gen4/scripts.ts +++ b/data/mods/gen4/scripts.ts @@ -1,7 +1,18 @@ export const Scripts: ModdedBattleScriptsData = { inherit: 'gen5', gen: 4, - + pokemon: { + inherit: true, + getActionSpeed() { + let speed = this.getStat('spe', false, false); + const trickRoomCheck = this.battle.ruleTable.has('twisteddimensionmod') ? + !this.battle.field.getPseudoWeather('trickroom') : this.battle.field.getPseudoWeather('trickroom'); + if (trickRoomCheck) { + speed = -speed; + } + return speed; + }, + }, actions: { inherit: true, runSwitch(pokemon) { @@ -13,6 +24,15 @@ export const Scripts: ModdedBattleScriptsData = { // pokemon.lastMove is reset for all Pokemon on the field after a switch. This affects Mirror Move. for (const poke of this.battle.getAllActive()) poke.lastMove = null; if (this.battle.gen === 1) pokemon.side.lastSelectedMoveSlot = 0; + for (const poke of pokemon.foes()) { + if (poke.volatiles['partialtrappinglock'] && poke.moveSlots[poke.side.lastSelectedMoveSlot].id === 'metronome') { + // this is not done for Mirror Move, potentially resulting in a desync + poke.side.lastSelectedMove = 'metronome' as ID; + if (this.battle.queue.willMove(poke)) { + this.battle.queue.changeAction(poke, { choice: 'move', poke, moveid: 'metronome' }); + } + } + } if (!pokemon.side.faintedThisTurn && pokemon.draggedIn !== this.battle.turn) { this.battle.runEvent('AfterSwitchInSelf', pokemon); } diff --git a/data/mods/gen5/formats-data.ts b/data/mods/gen5/formats-data.ts index d2b4f306a3..69a771cd97 100644 --- a/data/mods/gen5/formats-data.ts +++ b/data/mods/gen5/formats-data.ts @@ -37,7 +37,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, butterfree: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, weedle: { @@ -47,7 +47,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, beedrill: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, pidgey: { @@ -57,28 +57,28 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, pidgeot: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, rattata: { tier: "LC", }, raticate: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, spearow: { tier: "LC", }, fearow: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, ekans: { tier: "LC", }, arbok: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, pichu: { @@ -88,7 +88,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, raichu: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, sandshrew: { @@ -142,7 +142,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, wigglytuff: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, zubat: { @@ -167,14 +167,14 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, bellossom: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, paras: { tier: "LC", }, parasect: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, venonat: { @@ -195,7 +195,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, persian: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, psyduck: { @@ -248,7 +248,8 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, machoke: { - tier: "NFE", + tier: "ZUBL", + doublesTier: "NFE", }, machamp: { tier: "UU", @@ -265,7 +266,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, tentacool: { - tier: "LC", + tier: "PU", }, tentacruel: { tier: "OU", @@ -311,7 +312,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, farfetchd: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, doduo: { @@ -325,14 +326,14 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, dewgong: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, grimer: { tier: "LC", }, muk: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, shellder: { @@ -364,14 +365,14 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, hypno: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, krabby: { tier: "LC", }, kingler: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, voltorb: { @@ -392,7 +393,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, marowak: { - tier: "PU", + tier: "ZUBL", doublesTier: "DUU", }, tyrogue: { @@ -472,7 +473,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, seaking: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, staryu: { @@ -486,7 +487,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, mrmime: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, scyther: { @@ -560,7 +561,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DOU", }, flareon: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, espeon: { @@ -572,11 +573,11 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, leafeon: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, glaceon: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, porygon: { @@ -591,7 +592,8 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, omanyte: { - tier: "LC", + tier: "ZUBL", + doublesTier: "LC", }, omastar: { tier: "RU", @@ -616,7 +618,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, articuno: { - tier: "PU", + tier: "ZUBL", doublesTier: "DUU", }, zapdos: { @@ -631,7 +633,8 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, dragonair: { - tier: "NFE", + tier: "ZUBL", + doublesTier: "NFE", }, dragonite: { tier: "OU", @@ -652,7 +655,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, meganium: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, cyndaquil: { @@ -679,28 +682,28 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, furret: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, hoothoot: { tier: "LC", }, noctowl: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, ledyba: { tier: "LC", }, ledian: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, spinarak: { tier: "LC", }, ariados: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, chinchou: { @@ -721,7 +724,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DOU", }, natu: { - tier: "LC", + tier: "PU", }, xatu: { tier: "UU", @@ -751,7 +754,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, sudowoodo: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, hoppip: { @@ -775,7 +778,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, sunflora: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, yanma: { @@ -793,7 +796,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, murkrow: { - tier: "NFE", + tier: "PU", }, honchkrow: { tier: "UU", @@ -808,7 +811,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, unown: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, wynaut: { @@ -819,7 +822,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, girafarig: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, pineco: { @@ -830,7 +833,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, dunsparce: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, gligar: { @@ -845,7 +848,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, granbull: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, qwilfish: { @@ -853,7 +856,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, shuckle: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, heracross: { @@ -861,7 +864,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, sneasel: { - tier: "NFE", + tier: "PU", }, weavile: { tier: "UU", @@ -878,7 +881,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, magcargo: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, swinub: { @@ -893,18 +896,18 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DOU", }, corsola: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, remoraid: { tier: "LC", }, octillery: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, delibird: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, mantyke: { @@ -933,7 +936,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, stantler: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, smeargle: { @@ -1013,7 +1016,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, mightyena: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, zigzagoon: { @@ -1030,14 +1033,14 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, beautifly: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, cascoon: { tier: "NFE", }, dustox: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, lotad: { @@ -1071,7 +1074,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, pelipper: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, ralts: { @@ -1092,7 +1095,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, masquerain: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, shroomish: { @@ -1110,7 +1113,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "NFE", }, slaking: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, nincada: { @@ -1121,7 +1124,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, shedinja: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, whismur: { @@ -1131,7 +1134,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, exploud: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, makuhita: { @@ -1152,7 +1155,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, delcatty: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, sableye: { @@ -1188,11 +1191,11 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, plusle: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, minun: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, volbeat: { @@ -1200,7 +1203,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, illumise: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, budew: { @@ -1218,7 +1221,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, swalot: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, carvanha: { @@ -1232,7 +1235,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, wailord: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, numel: { @@ -1250,11 +1253,11 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, grumpig: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, spinda: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, trapinch: { @@ -1286,22 +1289,22 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, seviper: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, lunatone: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, solrock: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, barboach: { tier: "LC", }, whiscash: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, corphish: { @@ -1340,7 +1343,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, castform: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, castformsunny: { @@ -1350,7 +1353,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat castformsnowy: { }, kecleon: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, shuppet: { @@ -1372,14 +1375,14 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, tropius: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, chingling: { tier: "LC", }, chimecho: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, absol: { @@ -1390,7 +1393,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, glalie: { - tier: "PU", + tier: "ZUBL", doublesTier: "DUU", }, froslass: { @@ -1404,7 +1407,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, walrein: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, clamperl: { @@ -1423,7 +1426,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, luvdisc: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, bagon: { @@ -1513,7 +1516,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, monferno: { - tier: "NFE", + tier: "PU", }, infernape: { tier: "(OU)", @@ -1543,14 +1546,14 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, bibarel: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, kricketot: { tier: "LC", }, kricketune: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, shinx: { @@ -1560,7 +1563,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, luxray: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, cranidos: { @@ -1581,30 +1584,30 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, wormadam: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, wormadamsandy: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, wormadamtrash: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, mothim: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, combee: { tier: "LC", }, vespiquen: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, pachirisu: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, buizel: { @@ -1618,7 +1621,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, cherrim: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, cherrimsunshine: {}, @@ -1640,7 +1643,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, lopunny: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, glameow: { @@ -1658,14 +1661,14 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, bronzor: { - tier: "LC", + tier: "PU", }, bronzong: { tier: "UU", doublesTier: "DOU", }, chatot: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, spiritomb: { @@ -1676,7 +1679,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, gabite: { - tier: "NFE", + tier: "PU", }, garchomp: { tier: "OU", @@ -1712,14 +1715,14 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DOU", }, carnivine: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, finneon: { tier: "LC", }, lumineon: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, snover: { @@ -1778,7 +1781,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DOU", }, regigigas: { - tier: "PU", + tier: "ZUBL", doublesTier: "DUU", }, giratina: { @@ -1794,7 +1797,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DOU", }, phione: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, manaphy: { @@ -1887,7 +1890,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, watchog: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, lillipup: { @@ -1918,7 +1921,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, simisear: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, panpour: { @@ -1942,7 +1945,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, unfezant: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, blitzle: { @@ -2016,14 +2019,15 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, leavanny: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, venipede: { tier: "LC", }, whirlipede: { - tier: "NFE", + tier: "ZUBL", + doublesTier: "NFE", }, scolipede: { tier: "NUBL", @@ -2055,7 +2059,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, krokorok: { - tier: "NFE", + tier: "PU", }, krookodile: { tier: "UU", @@ -2073,14 +2077,14 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, dwebble: { - tier: "LC", + tier: "PU", }, crustle: { tier: "RU", doublesTier: "DUU", }, scraggy: { - tier: "NFE", + tier: "PU", }, scrafty: { tier: "UU", @@ -2112,7 +2116,8 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, trubbish: { - tier: "LC", + tier: "ZUBL", + doublesTier: "LC", }, garbodor: { tier: "NU", @@ -2147,7 +2152,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, duosion: { - tier: "NFE", + tier: "PU", }, reuniclus: { tier: "OU", @@ -2167,7 +2172,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "NFE", }, vanilluxe: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, deerling: { @@ -2178,7 +2183,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, emolga: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, karrablast: { @@ -2225,7 +2230,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, klang: { - tier: "NFE", + tier: "PU", }, klinklang: { tier: "RU", @@ -2262,7 +2267,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, fraxure: { - tier: "NFE", + tier: "PU", }, haxorus: { tier: "(OU)", @@ -2272,7 +2277,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, beartic: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, cryogonal: { @@ -2334,7 +2339,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat doublesTier: "DUU", }, heatmor: { - tier: "PU", + tier: "ZU", doublesTier: "DUU", }, durant: { @@ -2345,7 +2350,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat tier: "LC", }, zweilous: { - tier: "NFE", + tier: "PU", }, hydreigon: { tier: "(OU)", diff --git a/data/mods/gen5/moves.ts b/data/mods/gen5/moves.ts index bb0f793430..a5c93cd67a 100644 --- a/data/mods/gen5/moves.ts +++ b/data/mods/gen5/moves.ts @@ -663,12 +663,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { }, condition: { inherit: true, - onTryHit(target, source, effect) { + onTryHit(target, source, move) { // Quick Guard only blocks moves with a natural positive priority // (e.g. it doesn't block 0 priority moves boosted by Prankster) - if (effect && (effect.id === 'feint' || this.dex.moves.get(effect.id).priority <= 0)) { + if (move.id === 'feint' || this.dex.moves.get(move.id).priority <= 0) { return; } + if (this.checkMoveBypassesProtect(move, source, target)) return; this.add('-activate', target, 'Quick Guard'); const lockedmove = source.getVolatile('lockedmove'); if (lockedmove) { @@ -685,6 +686,19 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { inherit: true, priority: 3, flags: { noassist: 1, failcopycat: 1 }, + condition: { + inherit: true, + onFoeRedirectTarget(target, source, source2, move) { + const ragePowderUser = this.effectState.target; + if (ragePowderUser.isSkyDropped()) return; + + if (this.validTarget(ragePowderUser, source, move.target)) { + if (move.smartTarget) move.smartTarget = false; + this.debug("Rage Powder redirected target of move"); + return ragePowderUser; + } + }, + }, }, reflect: { inherit: true, diff --git a/data/mods/gen6/moves.ts b/data/mods/gen6/moves.ts index 81483dc239..7b77cff9b8 100644 --- a/data/mods/gen6/moves.ts +++ b/data/mods/gen6/moves.ts @@ -169,14 +169,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { inherit: true, condition: { inherit: true, - onTryHit(target, source, effect) { + onTryHit(target, source, move) { // Wide Guard blocks damaging spread moves - if ( - effect && - (effect.category === 'Status' || (effect.target !== 'allAdjacent' && effect.target !== 'allAdjacentFoes')) - ) { + if (move.category === 'Status' || (move?.target !== 'allAdjacent' && move.target !== 'allAdjacentFoes')) { return; } + if (this.checkMoveBypassesProtect(move, source, target, false)) return; this.add('-activate', target, 'move: Wide Guard'); const lockedmove = source.getVolatile('lockedmove'); if (lockedmove) { diff --git a/data/mods/gen6megasrevisited/abilities.ts b/data/mods/gen6megasrevisited/abilities.ts deleted file mode 100644 index 8482c1cfc7..0000000000 --- a/data/mods/gen6megasrevisited/abilities.ts +++ /dev/null @@ -1,369 +0,0 @@ -export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { - merciless: { - shortDesc: "This Pokemon's attacks are critical hits if the target is statused.", - onModifyCritRatio(critRatio, source, target) { - if (target?.status) return 5; - }, - name: "Merciless", - rating: 1.5, - num: 196, - gen: 6, - }, - pocketdimension: { - shortDesc: "This Pokemon switches out after using a status move.", - onModifyMove(move, pokemon) { - if (move.category === 'Status') { - move.selfSwitch = true; - this.add('-ability', pokemon, 'Pocket Dimension'); - this.add('-message', `${pokemon.name} will switch out if this moves lands!`); - } - }, - name: "Pocket Dimension", - rating: 4.5, - }, - grassysurge: { - inherit: true, - gen: 6, - }, - mistysurge: { - inherit: true, - gen: 6, - }, - neutralizinggas: { - inherit: true, - // Ability suppression cancelled in scripts.ts - // new Ability suppression implemented in scripts.ts - onSwitchIn: undefined, // no inherit - onEnd: undefined, // no inherit - onStart(pokemon) { - this.add('-ability', pokemon, 'Neutralizing Gas'); - }, - // onModifyPriority implemented in relevant abilities - onFoeBeforeMovePriority: 13, - onFoeBeforeMove(attacker, defender, move) { - attacker.addVolatile('neutralizinggas'); - }, - condition: { - onAfterMove(pokemon) { - pokemon.removeVolatile('neutralizinggas'); - }, - }, - flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 }, - desc: "While this Pokemon is active, opposing Pokemon's moves and their effects ignore its own Ability. Does not affect the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, or Zen Mode Abilities.", - shortDesc: "While this Pokemon is active, opposing Pokemon's Ability has no effect when it uses moves.", - gen: 6, - }, - nostalgiatrip: { - shortDesc: "This Pokemon's moves have the damage categories they would have in Gen 3. Fairy-type moves are Special.", - onStart(pokemon) { - this.add('-ability', pokemon, 'Nostalgia Trip'); - this.add('-message', `This Pokemon is experiencing a nostalgia trip!`); - }, - onModifyMovePriority: 8, - onModifyMove(move, pokemon) { - if (move.category === "Status") return; - if (['Fire', 'Water', 'Grass', 'Electric', 'Dark', 'Psychic', 'Dragon', 'Fairy', 'Ice'].includes(move.type)) { - move.category = "Special"; - } else { - move.category = "Physical"; - } - }, - name: "Nostalgia Trip", - rating: 4, - gen: 6, - }, - weatherreport: { - onBeforeMovePriority: 0.5, - onBeforeMove(target, source, move) { - if (move.type === 'Fire') { - this.field.setWeather('sunnyday'); - } else if (move.type === 'Water') { - this.field.setWeather('raindance'); - } - }, - name: "Weather Report", - shortDesc: "Before using a Water or Fire-type move, this Pokemon sets Rain Dance or Sunny Day respectively.", - rating: 4, - gen: 6, - }, - armortail: { - inherit: true, - gen: 6, - }, - brainpower: { - onModifySpAPriority: 5, - onModifySpA(spa) { - return this.chainModify(2); - }, - name: "Brain Power", - shortDesc: "This Pokemon's Special Attack is doubled.", - rating: 5, - }, - neuroforce: { - inherit: true, - gen: 6, - }, - bugzapper: { - onTryHit(target, source, move) { - if (target !== source && move.type === 'Bug') { - if (!source.addVolatile('trapped', target, move, 'trapper')) { - this.add('-immune', target, '[from] ability: Bug Zapper'); - } - return null; - } - }, - name: "Bug Zapper", - shortDesc: "This Pokemon is immune to Bug-type moves and traps the foe if hit by one.", - rating: 5, - }, - exoskeleton: { - onSourceModifyDamage(damage, source, target, move) { - if (move.category === 'Physical') { - return this.chainModify(0.5); - } - }, - name: "Exoskeleton", - shortDesc: "This Pokemon receives 1/2 damage from physical attacks; Hazard immunity.", - rating: 4, - }, - icescales: { - inherit: true, - onModifyAtkPriority: 5, - onModifyAtk(atk, attacker, defender, move) { - if (move.type === 'Ice') { - this.debug('Ice Scales boost'); - return this.chainModify(1.5); - } - }, - onModifySpAPriority: 5, - onModifySpA(atk, attacker, defender, move) { - if (move.type === 'Ice') { - this.debug('Ice Scales boost'); - return this.chainModify(1.5); - } - }, - onImmunity(type, pokemon) { - if (type === 'hail') return false; - }, - shortDesc: "This Pokemon receives 1/2 damage from special attacks. Ice moves have 1.5x power. Hail immunity.", - gen: 6, - }, - eartheater: { - inherit: true, - onDamage(damage, target, source, effect) { - if (effect && (effect.id === 'stealthrock' || effect.id === 'spikes')) { - this.heal(damage); - return false; - } - }, - shortDesc: "Heals 1/4 of its max HP when hit by Ground; Ground immunity. Healed by Spikes and Stealth Rock.", - gen: 6, - }, - toxicchain: { - inherit: true, - gen: 6, - }, - shellejection: { - onModifyMovePriority: -1, - onModifyMove(move, attacker) { - if (move.category === 'Special') { - attacker.addVolatile('shellejection'); - this.add('-ability', attacker, 'Shell Ejection'); - this.add('-message', `${attacker.name} is getting ready to leave the battlefield!`); - this.add('-message', `${attacker.name} can no longer use status moves!`); - } - }, - condition: { - duration: 2, - onDisableMove(pokemon) { - for (const moveSlot of pokemon.moveSlots) { - const move = this.dex.moves.get(moveSlot.id); - if (move.category === 'Status' && move.id !== 'mefirst') { - pokemon.disableMove(moveSlot.id); - } - } - }, - onSwitchOut(pokemon) { - pokemon.heal(pokemon.baseMaxhp / 3); - }, - onEnd(pokemon) { - this.add('-ability', pokemon, 'Shell Ejection'); - this.add('-message', `${pokemon.name} ejected itself from its shell!`); - pokemon.heal(pokemon.baseMaxhp / 3); - pokemon.switchFlag = true; - }, - }, - name: "Shell Ejection", - rating: 3.5, - gen: 6, - shortDesc: "On using Special move: switching heals 1/3, can't use status, switches out at end of next turn.", - }, - sharpness: { - inherit: true, - gen: 6, - }, - dauntlessshield: { - onStart(pokemon) { - this.boost({ def: 1 }, pokemon); - pokemon.addVolatile('dauntlessshield'); - }, - onResidualOrder: 6, - onResidual(pokemon) { - if (pokemon.positiveBoosts()) { - this.heal(pokemon.baseMaxhp / 16); - this.add('-message', `${pokemon.name}'s shield gives it strength!`); - } - }, - name: "Dauntless Shield", - rating: 5, - num: 235, - shortDesc: "+1 Defense on switch-in. Heals 1/16 of max HP if it has a positive boost.", - gen: 6, - }, - confidence: { - onSourceAfterFaint(length, target, source, effect) { - if (effect && effect.effectType === 'Move') { - this.boost({ spa: length }, source); - } - }, - name: "Confidence", - rating: 3, - shortDesc: "This Pokemon's Sp. Atk is raised by 1 stage if it attacks and KOes another Pokemon.", - gen: 6, - }, - electricsurge: { - inherit: true, - gen: 6, - }, - goodasgold: { - inherit: true, - gen: 6, - }, - opportunist: { - inherit: true, - onUpdate(pokemon) { - let activate = false; - const boosts: SparseBoostsTable = {}; - let i: BoostID; - for (i in pokemon.boosts) { - if (pokemon.boosts[i] < 0) { - activate = true; - boosts[i] = 0; - } - } - if (this.effectState.herb) return; - if (activate) { - pokemon.setBoost(boosts); - this.effectState.herb = true; - this.add('-ability', pokemon, 'Opportunist'); - this.add('-clearnegativeboost', pokemon, '[silent]'); - } - }, - onSwitchIn(pokemon) { - delete this.effectState.herb; - }, - shortDesc: "Copies foe's stat gains as they happen. Resets negative stat changes once per switch-in.", - gen: 6, - }, - intoxicate: { - onModifyTypePriority: -1, - onModifyType(move, pokemon) { - const noModifyType = [ - 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball', - ]; - if (move.type === 'Normal' && !noModifyType.includes(move.id) && - !(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) { - move.type = 'Poison'; - move.typeChangerBoosted = this.effect; - } - }, - onBasePowerPriority: 23, - onBasePower(basePower, pokemon, target, move) { - if (move.typeChangerBoosted) return this.chainModify([5325, 4096]); - }, - name: "Intoxicate", - rating: 4, - shortDesc: "This Pokemon's Normal-type moves become Poison-type and have 1.3x power.", - }, - dragonsgale: { - onStart(source) { - this.field.setWeather('deltastream'); - }, - onAnySetWeather(target, source, weather) { - const strongWeathers = ['desolateland', 'primordialsea', 'deltastream']; - if (this.field.getWeather().id === 'deltastream' && !strongWeathers.includes(weather.id)) return false; - }, - onEnd(pokemon) { - if (this.field.weatherState.source !== pokemon) return; - for (const target of this.getAllActive()) { - if (target === pokemon) continue; - if (target.hasAbility('dragonsgale')) { - this.field.weatherState.source = target; - return; - } - } - this.field.clearWeather(); - }, - onDamage(damage, target, source, effect) { - if (effect && (effect.id === 'stealthrock' || effect.id === 'spikes')) { - return damage / 2; - } - }, - flags: {}, - name: "Dragon's Gale", - shortDesc: "On switch-in, sets Delta Stream. User takes halved damage from hazards.", - rating: 5, - }, - parentalbond: { - onPrepareHit(source, target, move) { - if (move.category === 'Status' || move.selfdestruct || move.multihit) return; - if ([ - 'endeavor', 'seismictoss', 'psywave', 'nightshade', 'sonicboom', 'dragonrage', - 'superfang', 'naturesmadness', 'bide', 'counter', 'mirrorcoat', 'metalburst', - ].includes(move.id)) return; - if (!move.spreadHit && !move.isZ && !move.isMax) { - move.multihit = 2; - move.multihitType = 'parentalbond'; - } - }, - onSourceModifySecondaries(secondaries, target, source, move) { - if (move.multihitType === 'parentalbond' && move.id === 'secretpower' && move.hit < 2) { - // hack to prevent accidentally suppressing King's Rock/Razor Fang - return secondaries.filter(effect => effect.volatileStatus === 'flinch'); - } - }, - name: "Parental Bond", - rating: 4.5, - shortDesc: "This Pokemon's damaging moves hit twice. The second hit has its damage quartered.", - num: 184, - }, - - // for ngas - galewings: { - // for ngas - inherit: true, - onModifyPriority(priority, pokemon, target, move) { - for (const poke of this.getAllActive()) { - if (poke.hasAbility('neutralizinggas') && poke.side.id !== pokemon.side.id && !poke.abilityState.ending) { - return; - } - } - if (move && move.type === 'Flying') return priority + 1; - }, - }, - prankster: { - // for ngas - inherit: true, - onModifyPriority(priority, pokemon, target, move) { - for (const poke of this.getAllActive()) { - if (poke.hasAbility('neutralizinggas') && poke.side.id !== pokemon.side.id && !poke.abilityState.ending) { - return; - } - } - if (move?.category === 'Status') { - move.pranksterBoosted = true; - return priority + 1; - } - }, - }, -}; diff --git a/data/mods/gen6megasrevisited/formats-data.ts b/data/mods/gen6megasrevisited/formats-data.ts deleted file mode 100644 index a5d97dda38..0000000000 --- a/data/mods/gen6megasrevisited/formats-data.ts +++ /dev/null @@ -1,26 +0,0 @@ -export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { - blaziken: { - tier: "OU", - }, - blazikenmega: { - tier: "OU", - }, - gengarmega: { - tier: "OU", - }, - kangaskhanmega: { - tier: "OU", - }, - lucariomega: { - tier: "OU", - }, - mawilemega: { - tier: "OU", - }, - sableyemega: { - tier: "OU", - }, - salamencemega: { - tier: "OU", - }, -}; diff --git a/data/mods/gen6megasrevisited/items.ts b/data/mods/gen6megasrevisited/items.ts deleted file mode 100644 index 90f2c22c71..0000000000 --- a/data/mods/gen6megasrevisited/items.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { - meteorite: { - name: "Meteorite", - spritenum: 615, - megaStone: { "Rayquaza": "Rayquaza-Mega" }, - itemUser: ["Rayquaza"], - onTakeItem(item, source) { - return !item.megaStone?.[source.baseSpecies.baseSpecies]; - }, - desc: "If held by a Rayquaza, this item allows it to Mega Evolve in battle.", - }, -}; diff --git a/data/mods/gen6megasrevisited/moves.ts b/data/mods/gen6megasrevisited/moves.ts deleted file mode 100644 index b8e3a95b36..0000000000 --- a/data/mods/gen6megasrevisited/moves.ts +++ /dev/null @@ -1,77 +0,0 @@ -export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { - stealthrock: { - inherit: true, - condition: { - // this is a side condition - onSideStart(side) { - this.add('-sidestart', side, 'move: Stealth Rock'); - }, - onSwitchIn(pokemon) { - if (pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) return; - const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6); - this.damage(pokemon.maxhp * (2 ** typeMod) / 8); - }, - }, - }, - toxicspikes: { - inherit: true, - condition: { - // this is a side condition - onSideStart(side) { - this.add('-sidestart', side, 'move: Toxic Spikes'); - this.effectState.layers = 1; - }, - onSideRestart(side) { - if (this.effectState.layers >= 2) return false; - this.add('-sidestart', side, 'move: Toxic Spikes'); - this.effectState.layers++; - }, - onSwitchIn(pokemon) { - if (!pokemon.isGrounded()) return; - if (pokemon.hasType('Poison')) { - this.add('-sideend', pokemon.side, 'move: Toxic Spikes', `[of] ${pokemon}`); - pokemon.side.removeSideCondition('toxicspikes'); - } else if (pokemon.hasType('Steel') || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) { - // do nothing - } else if (this.effectState.layers >= 2) { - pokemon.trySetStatus('tox', pokemon.side.foe.active[0]); - } else { - pokemon.trySetStatus('psn', pokemon.side.foe.active[0]); - } - }, - }, - }, - spikes: { - inherit: true, - condition: { - // this is a side condition - onSideStart(side) { - this.add('-sidestart', side, 'Spikes'); - this.effectState.layers = 1; - }, - onSideRestart(side) { - if (this.effectState.layers >= 3) return false; - this.add('-sidestart', side, 'Spikes'); - this.effectState.layers++; - }, - onSwitchIn(pokemon) { - if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) return; - const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 - this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24); - }, - }, - }, - stickyweb: { - inherit: true, - condition: { - onSideStart(side) { - this.add('-sidestart', side, 'move: Sticky Web'); - }, - onSwitchIn(pokemon) { - if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) return; - this.add('-activate', pokemon, 'move: Sticky Web'); - this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb')); - }, - }, - }, -}; diff --git a/data/mods/gen6megasrevisited/pokedex.ts b/data/mods/gen6megasrevisited/pokedex.ts deleted file mode 100644 index 70821f3c7f..0000000000 --- a/data/mods/gen6megasrevisited/pokedex.ts +++ /dev/null @@ -1,249 +0,0 @@ -export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { - audinomega: { - inherit: true, - types: ["Normal", "Electric"], - baseStats: { hp: 103, atk: 60, def: 120, spa: 110, spd: 97, spe: 55 }, - abilities: { 0: "Regenerator" }, - }, - houndoommega: { - inherit: true, - types: ["Dark", "Fire"], - baseStats: { hp: 75, atk: 90, def: 90, spa: 140, spd: 90, spe: 115 }, - abilities: { 0: "Merciless" }, - }, - lucariomega: { - inherit: true, - types: ["Fighting", "Steel"], - baseStats: { hp: 70, atk: 125, def: 70, spa: 140, spd: 94, spe: 126 }, - abilities: { 0: "Lightning Rod" }, - }, - banettemega: { - inherit: true, - types: ["Ghost", "Steel"], - baseStats: { hp: 64, atk: 149, def: 75, spa: 83, spd: 83, spe: 101 }, - abilities: { 0: "Pocket Dimension" }, - }, - glaliemega: { - inherit: true, - types: ["Ice", "Steel"], - baseStats: { hp: 80, atk: 160, def: 70, spa: 95, spd: 70, spe: 105 }, - abilities: { 0: "Refrigerate" }, - }, - venusaurmega: { - inherit: true, - types: ["Grass", "Poison"], - baseStats: { hp: 80, atk: 82, def: 123, spa: 120, spd: 120, spe: 100 }, - abilities: { 0: "Grassy Surge" }, - }, - blastoisemega: { - inherit: true, - types: ["Water", "Fairy"], - baseStats: { hp: 79, atk: 83, def: 130, spa: 135, spd: 105, spe: 98 }, - abilities: { 0: "Misty Surge" }, - }, - charizardmegay: { - inherit: true, - types: ["Fire", "Flying"], - baseStats: { hp: 78, atk: 94, def: 93, spa: 159, spd: 110, spe: 100 }, - abilities: { 0: "Dragon's Gale" }, - }, - alakazammega: { - inherit: true, - types: ["Psychic", "Ice"], - baseStats: { hp: 55, atk: 50, def: 75, spa: 155, spd: 125, spe: 140 }, - abilities: { 0: "Magic Guard" }, - }, - pinsirmega: { - inherit: true, - types: ["Bug", "Ice"], - baseStats: { hp: 65, atk: 150, def: 110, spa: 80, spd: 85, spe: 110 }, - abilities: { 0: "Mountaineer" }, - }, - gengarmega: { - inherit: true, - types: ["Ghost", "Poison"], - baseStats: { hp: 60, atk: 65, def: 105, spa: 155, spd: 105, spe: 110 }, - abilities: { 0: "Neutralizing Gas" }, - }, - aerodactylmega: { - inherit: true, - types: ["Rock", "Flying"], - baseStats: { hp: 80, atk: 140, def: 65, spa: 85, spd: 100, spe: 145 }, - abilities: { 0: "Nostalgia Trip" }, - }, - steelixmega: { - inherit: true, - types: ["Steel", "Ground"], - baseStats: { hp: 75, atk: 135, def: 210, spa: 55, spd: 105, spe: 30 }, - abilities: { 0: "Flash Fire" }, - weightkg: 999.9, - }, - altariamega: { - inherit: true, - types: ["Dragon", "Fairy"], - baseStats: { hp: 75, atk: 90, def: 90, spa: 140, spd: 115, spe: 80 }, - abilities: { 0: "Weather Report" }, - }, - sceptilemega: { - inherit: true, - types: ["Grass", "Dragon"], - baseStats: { hp: 70, atk: 95, def: 79, spa: 145, spd: 99, spe: 142 }, - abilities: { 0: "Armor Tail" }, - }, - swampertmega: { - inherit: true, - types: ["Water", "Poison"], - baseStats: { hp: 100, atk: 145, def: 110, spa: 85, spd: 110, spe: 85 }, - abilities: { 0: "Toxic Chain" }, - }, - manectricmega: { - inherit: true, - types: ["Electric"], - baseStats: { hp: 70, atk: 75, def: 80, spa: 135, spd: 85, spe: 130 }, - abilities: { 0: "Bug Zapper" }, - }, - absolmega: { - inherit: true, - types: ["Dark", "Fairy"], - baseStats: { hp: 65, atk: 130, def: 60, spa: 135, spd: 60, spe: 115 }, - abilities: { 0: "Neuroforce" }, - }, - medichammega: { - inherit: true, - types: ["Fighting", "Psychic"], - baseStats: { hp: 60, atk: 60, def: 100, spa: 90, spd: 100, spe: 100 }, - abilities: { 0: "Brain Power" }, - }, - sableyemega: { - inherit: true, - types: ["Dark", "Ghost"], - baseStats: { hp: 50, atk: 95, def: 115, spa: 85, spd: 115, spe: 20 }, - }, - beedrillmega: { - inherit: true, - types: ["Bug", "Rock"], - baseStats: { hp: 65, atk: 140, def: 85, spa: 45, spd: 85, spe: 75 }, - abilities: { 0: "Exoskeleton" }, - }, - mawilemega: { - inherit: true, - types: ["Steel", "Fairy"], - baseStats: { hp: 50, atk: 90, def: 125, spa: 70, spd: 95, spe: 50 }, - abilities: { 0: "Huge Power" }, - }, - abomasnowmega: { - inherit: true, - types: ["Grass"], - abilities: { 0: "Ice Scales" }, - }, - cameruptmega: { - inherit: true, - types: ["Fire", "Ground"], - baseStats: { hp: 70, atk: 80, def: 140, spa: 135, spd: 115, spe: 20 }, - abilities: { 0: "Earth Eater" }, - }, - slowbromega: { - inherit: true, - types: ["Water", "Psychic"], - baseStats: { hp: 95, atk: 75, def: 150, spa: 120, spd: 120, spe: 30 }, - abilities: { 0: "Shell Ejection" }, - }, - gallademega: { - inherit: true, - types: ["Psychic", "Fighting"], - baseStats: { hp: 68, atk: 150, def: 100, spa: 75, spd: 127, spe: 98 }, - abilities: { 0: "Sharpness" }, - }, - ampharosmega: { - inherit: true, - types: ["Electric", "Dragon"], - baseStats: { hp: 90, atk: 95, def: 95, spa: 165, spd: 110, spe: 55 }, - abilities: { 0: "Mega Launcher" }, - }, - gyaradosmega: { - inherit: true, - types: ["Water", "Flying"], - baseStats: { hp: 95, atk: 130, def: 109, spa: 85, spd: 130, spe: 91 }, - abilities: { 0: "Aerilate" }, - }, - heracrossmega: { - inherit: true, - types: ["Bug", "Fighting"], - baseStats: { hp: 80, atk: 150, def: 150, spa: 40, spd: 110, spe: 70 }, - abilities: { 0: "Iron Barbs" }, - }, - sharpedomega: { - inherit: true, - types: ["Water", "Electric"], - baseStats: { hp: 70, atk: 130, def: 55, spa: 145, spd: 55, spe: 105 }, - abilities: { 0: "No Guard" }, - }, - gardevoirmega: { - inherit: true, - types: ["Psychic", "Fairy"], - baseStats: { hp: 68, atk: 65, def: 100, spa: 150, spd: 127, spe: 108 }, - }, - aggronmega: { - inherit: true, - types: ["Steel"], - baseStats: { hp: 70, atk: 145, def: 185, spa: 85, spd: 85, spe: 60 }, - abilities: { 0: "Dauntless Shield" }, - }, - kangaskhanmega: { - inherit: true, - types: ["Normal", "Ground"], - baseStats: { hp: 105, atk: 125, def: 105, spa: 50, spd: 105, spe: 100 }, - }, - salamencemega: { - inherit: true, - types: ["Dragon", "Flying"], - baseStats: { hp: 95, atk: 135, def: 105, spa: 155, spd: 105, spe: 105 }, - abilities: { 0: "Confidence" }, - }, - garchompmega: { - inherit: true, - types: ["Dragon", "Ground"], - baseStats: { hp: 108, atk: 150, def: 115, spa: 140, spd: 85, spe: 102 }, - abilities: { 0: "Water Absorb" }, - }, - tyranitarmega: { - inherit: true, - types: ["Rock", "Electric"], - baseStats: { hp: 100, atk: 144, def: 120, spa: 110, spd: 144, spe: 82 }, - abilities: { 0: "Electric Surge" }, - }, - latiasmega: { - inherit: true, - abilities: { 0: "Trace" }, - }, - latiosmega: { - inherit: true, - baseStats: { hp: 80, atk: 140, def: 100, spa: 150, spd: 120, spe: 110 }, - abilities: { 0: "Opportunist" }, - }, - dianciemega: { - inherit: true, - abilities: { 0: "Good As Gold" }, - }, - blazikenmega: { - inherit: true, - baseStats: { hp: 80, atk: 150, def: 80, spa: 120, spd: 90, spe: 110 }, - abilities: { 0: "Regenerator" }, - }, - mewtwomegax: { - inherit: true, - types: ["Psychic", "Poison"], - baseStats: { hp: 106, atk: 140, def: 130, spa: 154, spd: 120, spe: 130 }, - abilities: { 0: "Intoxicate" }, - }, - mewtwomegay: { - inherit: true, - types: ["Psychic", "Water"], - baseStats: { hp: 106, atk: 120, def: 110, spa: 194, spd: 130, spe: 120 }, - abilities: { 0: "Levitate" }, - }, - rayquazamega: { - inherit: true, - requiredItem: "Meteorite", - }, -}; diff --git a/data/mods/gen6megasrevisited/rulesets.ts b/data/mods/gen6megasrevisited/rulesets.ts deleted file mode 100644 index b1a52de493..0000000000 --- a/data/mods/gen6megasrevisited/rulesets.ts +++ /dev/null @@ -1,33 +0,0 @@ -export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = { - megadatamod: { - effectType: 'Rule', - name: 'Mega Data Mod', - desc: 'Gives data on stats, Ability and types when a Pokémon Mega Evolves or undergoes Ultra Burst.', - onSwitchIn(pokemon) { - if (pokemon.species.forme.startsWith('Mega') || pokemon.species.forme.startsWith('Ultra')) { - this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]'); - } - }, - onAfterMega(pokemon) { - this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]'); - const species = pokemon.species; - let buf = `${species.name} `; - buf += ``; - buf += `${species.types[0]}`; - if (species.types[1]) { - buf += `${species.types[1]}`; - } - buf += ` `; - buf += `${species.abilities[0]}`; - const stats = []; - let stat: StatID; - for (stat in species.baseStats) { - const statNames: { [k in StatID]: string } = { hp: "HP", atk: "Atk", def: "Def", spa: "SpA", spd: "SpD", spe: "Spe" }; - stats.push(`${statNames[stat]}
${species.baseStats[stat]}
`); - } - buf += `${stats.join(' ')}`; - buf += ``; - this.add(`raw|
  • ${buf}
`); - }, - }, -}; diff --git a/data/mods/gen6megasrevisited/scripts.ts b/data/mods/gen6megasrevisited/scripts.ts deleted file mode 100644 index fe185cc6a0..0000000000 --- a/data/mods/gen6megasrevisited/scripts.ts +++ /dev/null @@ -1,237 +0,0 @@ -export const Scripts: ModdedBattleScriptsData = { - gen: 6, - inherit: 'gen6', - actions: { - // for parental bond - modifyDamage( - baseDamage: number, pokemon: Pokemon, target: Pokemon, move: ActiveMove, suppressMessages = false - ) { - const tr = this.battle.trunc; - if (!move.type) move.type = '???'; - const type = move.type; - baseDamage += 2; - if (move.spreadHit) { - // multi-target modifier (doubles only) - const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75; - this.battle.debug(`Spread modifier: ${spreadModifier}`); - baseDamage = this.battle.modify(baseDamage, spreadModifier); - } else if (move.multihitType === 'parentalbond' && move.hit > 1) { - // Parental Bond modifier - const bondModifier = 0.25; - this.battle.debug(`Parental Bond modifier: ${bondModifier}`); - baseDamage = this.battle.modify(baseDamage, bondModifier); - } - baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage); - const isCrit = target.getMoveHitData(move).crit; - if (isCrit) { - baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2))); - } - baseDamage = this.battle.randomizer(baseDamage); - if (type !== '???') { - let stab: number | [number, number] = 1; - const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type); - if (isSTAB) { - stab = 1.5; - } - if (pokemon.terastallized === 'Stellar') { - if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) { - stab = isSTAB ? 2 : [4915, 4096]; - move.stellarBoosted = true; - if (pokemon.species.name !== 'Terapagos-Stellar') { - pokemon.stellarBoostedTypes.push(type); - } - } - } else { - if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) { - stab = 2; - } - stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab); - } - baseDamage = this.battle.modify(baseDamage, stab); - } - let typeMod = target.runEffectiveness(move); - typeMod = this.battle.clampIntRange(typeMod, -6, 6); - target.getMoveHitData(move).typeMod = typeMod; - if (typeMod > 0) { - if (!suppressMessages) this.battle.add('-supereffective', target); - for (let i = 0; i < typeMod; i++) { - baseDamage *= 2; - } - } - if (typeMod < 0) { - if (!suppressMessages) this.battle.add('-resisted', target); - - for (let i = 0; i > typeMod; i--) { - baseDamage = tr(baseDamage / 2); - } - } - if (isCrit && !suppressMessages) this.battle.add('-crit', target); - if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) { - if (this.battle.gen < 6 || move.id !== 'facade') { - baseDamage = this.battle.modify(baseDamage, 0.5); - } - } - // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers - if (this.battle.gen === 5 && !baseDamage) baseDamage = 1; - // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb. - baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage); - if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) { - baseDamage = this.battle.modify(baseDamage, 0.25); - this.battle.add('-zbroken', target); - } - // Generation 6-7 moves the check for minimum 1 damage after the final modifier... - if (this.battle.gen !== 5 && !baseDamage) return 1; - // ...but 16-bit truncation happens even later, and can truncate to 0 - return tr(baseDamage, 16); - }, - }, - pokemon: { - // for neutralizing gas - ignoringAbility() { - if (this.battle.gen >= 5 && !this.isActive) return true; - if (this.getAbility().flags['notransform'] && this.transformed) return true; - if (this.getAbility().flags['cantsuppress']) return false; - if (this.volatiles['gastroacid']) return true; - if (this.ability === ('neutralizinggas' as ID)) return false; - if (this.volatiles['neutralizinggas']) return true; - return false; - }, - }, - init() { - this.modData("Learnsets", "lucario").learnset.meteormash = ["6L1"]; - this.modData("Learnsets", "lucario").learnset.machpunch = ["6L1"]; - this.modData("Learnsets", "houndoom").learnset.toxicspikes = ["6L1"]; - this.modData("Learnsets", "houndoom").learnset.venoshock = ["6L1"]; - this.modData("Learnsets", "houndoom").learnset.hex = ["6L1"]; - this.modData("Learnsets", "audino").learnset.discharge = ["6L1"]; - this.modData("Learnsets", "audino").learnset.voltswitch = ["6L1"]; - this.modData("Learnsets", "audino").learnset.chargebeam = ["6L1"]; - this.modData("Learnsets", "audino").learnset.charge = ["6L1"]; - this.modData("Learnsets", "audino").learnset.zapcannon = ["6L1"]; - this.modData("Learnsets", "glalie").learnset.thunderfang = ["6L1"]; - this.modData("Learnsets", "glalie").learnset.partingshot = ["6L1"]; - this.modData("Learnsets", "glalie").learnset.boomburst = ["6L1"]; - this.modData("Learnsets", "banette").learnset.ironhead = ["6L1"]; - this.modData("Learnsets", "banette").learnset.metalsound = ["6L1"]; - this.modData("Learnsets", "banette").learnset.powder = ["6L1"]; - this.modData("Learnsets", "banette").learnset.stealthrock = ["6L1"]; - this.modData("Learnsets", "banette").learnset.defog = ["6L1"]; - this.modData("Learnsets", "venusaur").learnset.psychic = ["6L1"]; - this.modData("Learnsets", "venusaur").learnset.calmmind = ["6L1"]; - this.modData("Learnsets", "blastoise").learnset.moonblast = ["6L1"]; - this.modData("Learnsets", "blastoise").learnset.mistyterrain = ["6L1"]; - this.modData("Learnsets", "blastoise").learnset.taunt = ["6L1"]; - this.modData("Learnsets", "blastoise").learnset.drainingkiss = ["6L1"]; - this.modData("Learnsets", "blastoise").learnset.dazzlinggleam = ["6L1"]; - this.modData("Learnsets", "charizard").learnset.calmmind = ["6L1"]; - this.modData("Learnsets", "charizard").learnset.hurricane = ["6L1"]; - this.modData("Learnsets", "charizard").learnset.lavaplume = ["6L1"]; - this.modData("Learnsets", "gengar").learnset.reflecttype = ["6L1"]; - this.modData("Learnsets", "gengar").learnset.calmmind = ["6L1"]; - this.modData("Learnsets", "alakazam").learnset.blizzard = ["6L1"]; - this.modData("Learnsets", "alakazam").learnset.flashcannon = ["6L1"]; - this.modData("Learnsets", "alakazam").learnset.icebeam = ["6L1"]; - this.modData("Learnsets", "alakazam").learnset.hail = ["6L1"]; - this.modData("Learnsets", "pinsir").learnset.hail = ["6L1"]; - this.modData("Learnsets", "pinsir").learnset.megahorn = ["6L1"]; - this.modData("Learnsets", "pinsir").learnset.uturn = ["6L1"]; - this.modData("Learnsets", "pinsir").learnset.iceshard = ["6L1"]; - this.modData("Learnsets", "pinsir").learnset.iciclecrash = ["6L1"]; - this.modData("Learnsets", "pinsir").learnset.icebeam = ["6L1"]; - this.modData("Learnsets", "pinsir").learnset.blizzard = ["6L1"]; - this.modData("Learnsets", "pinsir").learnset.roost = ["6L1"]; - this.modData("Learnsets", "pinsir").learnset.iciclespear = ["6L1"]; - this.modData("Learnsets", "aerodactyl").learnset.powergem = ["6L1"]; - this.modData("Learnsets", "aerodactyl").learnset.shadowball = ["6L1"]; - this.modData("Learnsets", "aerodactyl").learnset.hurricane = ["6L1"]; - this.modData("Learnsets", "steelix").learnset.heatcrash = ["6L1"]; - this.modData("Learnsets", "steelix").learnset.rapidspin = ["6L1"]; - this.modData("Learnsets", "steelix").learnset.smackdown = ["6L1"]; - this.modData("Learnsets", "altaria").learnset.scald = ["6L1"]; - this.modData("Learnsets", "altaria").learnset.hydropump = ["6L1"]; - this.modData("Learnsets", "altaria").learnset.thunder = ["6L1"]; - this.modData("Learnsets", "sceptile").learnset.calmmind = ["6L1"]; - this.modData("Learnsets", "sceptile").learnset.sludgewave = ["6L1"]; - this.modData("Learnsets", "swampert").learnset.sludgebomb = ["6L1"]; - this.modData("Learnsets", "swampert").learnset.bulkup = ["6L1"]; - this.modData("Learnsets", "swampert").learnset.toxicspikes = ["6L1"]; - this.modData("Learnsets", "swampert").learnset.aquajet = ["6L1"]; - this.modData("Learnsets", "swampert").learnset.gunkshot = ["6L1"]; - this.modData("Learnsets", "swampert").learnset.poisonjab = ["6L1"]; - this.modData("Learnsets", "pidgeot").learnset.focusblast = ["6L1"]; - this.modData("Learnsets", "absol").learnset.closecombat = ["6L1"]; - this.modData("Learnsets", "absol").learnset.moonblast = ["6L1"]; - this.modData("Learnsets", "absol").learnset.moonlight = ["6L1"]; - this.modData("Learnsets", "medicham").learnset.aurasphere = ["6L1"]; - this.modData("Learnsets", "medicham").learnset.thunderbolt = ["6L1"]; - this.modData("Learnsets", "medicham").learnset.closecombat = ["6L1"]; - this.modData("Learnsets", "medicham").learnset.gunkshot = ["6L1"]; - this.modData("Learnsets", "medicham").learnset.healingwish = ["6L1"]; - this.modData("Learnsets", "beedrill").learnset.earthquake = ["6L1"]; - this.modData("Learnsets", "beedrill").learnset.stoneedge = ["6L1"]; - this.modData("Learnsets", "beedrill").learnset.rockslide = ["6L1"]; - this.modData("Learnsets", "beedrill").learnset.smackdown = ["6L1"]; - this.modData("Learnsets", "beedrill").learnset.stealthrock = ["6L1"]; - this.modData("Learnsets", "beedrill").learnset.diamondstorm = ["6L1"]; - this.modData("Learnsets", "mawile").learnset.firepunch = ["6L1"]; - this.modData("Learnsets", "mawile").learnset.rockslide = ["6L1"]; - this.modData("Learnsets", "mawile").learnset.slackoff = ["6L1"]; - this.modData("Learnsets", "camerupt").learnset.morningsun = ["6L1"]; - this.modData("Learnsets", "abomasnow").learnset.spikyshield = ["6L1"]; - this.modData("Learnsets", "abomasnow").learnset.earthpower = ["6L1"]; - this.modData("Learnsets", "abomasnow").learnset.hornleech = ["6L1"]; - this.modData("Learnsets", "gallade").learnset.sacredsword = ["6L1"]; - this.modData("Learnsets", "gallade").learnset.machpunch = ["6L1"]; - this.modData('Moves', 'aerialace').flags.slicing = 1; - this.modData('Moves', 'aircutter').flags.slicing = 1; - this.modData('Moves', 'airslash').flags.slicing = 1; - this.modData('Moves', 'behemothblade').flags.slicing = 1; - this.modData('Moves', 'crosspoison').flags.slicing = 1; - this.modData('Moves', 'cut').flags.slicing = 1; - this.modData('Moves', 'furycutter').flags.slicing = 1; - this.modData('Moves', 'nightslash').flags.slicing = 1; - this.modData('Moves', 'psychocut').flags.slicing = 1; - this.modData('Moves', 'razorleaf').flags.slicing = 1; - this.modData('Moves', 'razorshell').flags.slicing = 1; - this.modData('Moves', 'sacredsword').flags.slicing = 1; - this.modData('Moves', 'slash').flags.slicing = 1; - this.modData('Moves', 'solarblade').flags.slicing = 1; - this.modData('Moves', 'xscissor').flags.slicing = 1; - this.modData("Learnsets", "ampharos").learnset.waterpulse = ["6L1"]; - this.modData("Learnsets", "ampharos").learnset.aurasphere = ["6L1"]; - this.modData("Learnsets", "ampharos").learnset.darkpulse = ["6L1"]; - this.modData("Learnsets", "ampharos").learnset.defog = ["6L1"]; - this.modData("Learnsets", "ampharos").learnset.slackoff = ["6L1"]; - this.modData("Learnsets", "heracross").learnset.healorder = ["6L1"]; - this.modData("Learnsets", "heracross").learnset.circlethrow = ["6L1"]; - this.modData("Learnsets", "heracross").learnset.spikes = ["6L1"]; - this.modData("Learnsets", "heracross").learnset.icepunch = ["6L1"]; - this.modData("Learnsets", "sharpedo").learnset.thunder = ["6L1"]; - this.modData("Learnsets", "gardevoir").learnset.rapidspin = ["6L1"]; - this.modData("Learnsets", "gardevoir").learnset.mysticalfire = ["6L1"]; - this.modData("Learnsets", "aggron").learnset.voltswitch = ["6L1"]; - this.modData("Learnsets", "kangaskhan").learnset.milkdrink = ["6L1"]; - this.modData("Learnsets", "salamence").learnset.hurricane = ["6L1"]; - this.modData("Learnsets", "salamence").learnset.airslash = ["6L1"]; - this.modData("Learnsets", "salamence").learnset.ironhead = ["6L1"]; - this.modData("Learnsets", "tyranitar").learnset.wildcharge = ["6L1"]; - this.modData("Learnsets", "tyranitar").learnset.waterfall = ["6L1"]; - this.modData("Learnsets", "diancie").learnset.spikyshield = ["6L1"]; - this.modData("Learnsets", "blaziken").learnset.uturn = ["6L1"]; - this.modData("Learnsets", "blaziken").learnset.spikes = ["6L1"]; - this.modData("Learnsets", "blaziken").learnset.roost = ["6L1"]; - this.modData("Learnsets", "blaziken").learnset.closecombat = ["6L1"]; - this.modData("Learnsets", "mewtwo").learnset.extremespeed = ["6L1"]; - this.modData("Learnsets", "mewtwo").learnset.sludgewave = ["6L1"]; - this.modData("Learnsets", "mewtwo").learnset.swordsdance = ["6L1"]; - this.modData("Learnsets", "mewtwo").learnset.uturn = ["6L1"]; - this.modData("Learnsets", "mewtwo").learnset.closecombat = ["6L1"]; - this.modData("Learnsets", "mewtwo").learnset.drainpunch = ["6L1"]; - this.modData("Learnsets", "mewtwo").learnset.machpunch = ["6L1"]; - this.modData("Learnsets", "mewtwo").learnset.scald = ["6L1"]; - this.modData("Learnsets", "mewtwo").learnset.surf = ["6L1"]; - this.modData("Learnsets", "mewtwo").learnset.hydropump = ["6L1"]; - this.modData("Learnsets", "rayquaza").learnset.coil = ["6L1"]; - this.modData("Learnsets", "rayquaza").learnset.defog = ["6L1"]; - }, -}; diff --git a/data/mods/gen6mixandmega/items.ts b/data/mods/gen6mixandmega/items.ts deleted file mode 100644 index f02eb9841b..0000000000 --- a/data/mods/gen6mixandmega/items.ts +++ /dev/null @@ -1,46 +0,0 @@ -export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { - blueorb: { - inherit: true, - onSwitchIn(pokemon) { - if (pokemon.isActive && !pokemon.species.isPrimal && !pokemon.transformed) { - // @ts-expect-error modded - const species: Species = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Kyogre-Primal', pokemon); - if (pokemon.m.originalSpecies === 'Kyogre') { - pokemon.formeChange(species, this.effect, true); - } else { - pokemon.formeChange(species, this.effect, true); - pokemon.baseSpecies = species; - this.add('-start', pokemon, 'Blue Orb', '[silent]'); - } - } - }, - onTakeItem: false, - }, - redorb: { - inherit: true, - onSwitchIn(pokemon) { - if (pokemon.isActive && !pokemon.species.isPrimal && !pokemon.transformed) { - // @ts-expect-error modded - const species: Species = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Groudon-Primal', pokemon); - if (pokemon.m.originalSpecies === 'Groudon') { - pokemon.formeChange(species, this.effect, true); - } else { - pokemon.formeChange(species, this.effect, true); - pokemon.baseSpecies = species; - this.add('-start', pokemon, 'Red Orb', '[silent]'); - const apparentSpecies = pokemon.illusion ? pokemon.illusion.species.name : pokemon.m.originalSpecies; - const oSpecies = this.dex.species.get(apparentSpecies); - if (pokemon.illusion) { - const types = oSpecies.types; - if (types.length > 1 || types[types.length - 1] !== 'Fire') { - this.add('-start', pokemon, 'typechange', (types[0] !== 'Fire' ? types[0] + '/' : '') + 'Fire', '[silent]'); - } - } else 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]'); - } - } - } - }, - onTakeItem: false, - }, -}; diff --git a/data/mods/gen6mixandmega/scripts.ts b/data/mods/gen6mixandmega/scripts.ts deleted file mode 100644 index e4b67ff9c7..0000000000 --- a/data/mods/gen6mixandmega/scripts.ts +++ /dev/null @@ -1,117 +0,0 @@ -export const Scripts: ModdedBattleScriptsData = { - gen: 6, - inherit: 'gen6', - init() { - for (const i in this.data.Items) { - if (!this.data.Items[i].megaStone) continue; - this.modData('Items', i).onTakeItem = false; - } - }, - actions: { - canMegaEvo(pokemon) { - if (pokemon.species.isMega || pokemon.species.isPrimal) return null; - - const item = pokemon.getItem(); - if (item.megaStone) { - const values = Object.values(item.megaStone); - if (values.includes(pokemon.name)) return null; - return values[0]; - } else if (pokemon.baseMoves.includes('dragonascent')) { - return 'Rayquaza-Mega'; - } else { - return null; - } - }, - runMegaEvo(pokemon) { - if (pokemon.species.isMega || pokemon.species.isPrimal) return false; - - const species: Species = (this as any).getMixedSpecies(pokemon.m.originalSpecies, pokemon.canMegaEvo, pokemon); - - // Do we have a proper sprite for it? Code for when megas actually exist - if (this.dex.species.get(pokemon.canMegaEvo as any).baseSpecies === pokemon.m.originalSpecies) { - pokemon.formeChange(species, pokemon.getItem(), true); - } else { - const oSpecies = this.dex.species.get(pokemon.m.originalSpecies); - const oMegaSpecies = this.dex.species.get((species as any).originalSpecies); - pokemon.formeChange(species, pokemon.getItem(), true); - this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]'); - if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) { - this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - } - } - - pokemon.canMegaEvo = false; - return true; - }, - getMixedSpecies(originalForme, formeChange, pokemon) { - const originalSpecies = this.dex.species.get(originalForme); - const formeChangeSpecies = this.dex.species.get(formeChange); - if (originalSpecies.baseSpecies === formeChangeSpecies.baseSpecies) { - return formeChangeSpecies; - } - const deltas = (this as any).getFormeChangeDeltas(formeChangeSpecies, pokemon); - const species = (this as any).mutateOriginalSpecies(originalSpecies, deltas); - return species; - }, - getFormeChangeDeltas(formeChangeSpecies, pokemon) { - // Should be fine as long as Necrozma-U doesn't get added or Game Freak makes me sad with some convoluted forme change - const baseSpecies = this.dex.species.get(formeChangeSpecies.isMega ? - formeChangeSpecies.battleOnly as string : formeChangeSpecies.baseSpecies); - const deltas: { - ability: string, - baseStats: SparseStatsTable, - weighthg: number, - heightm: number, - originalSpecies: string, - requiredItem: string | undefined, - type?: string, - formeType?: string, - isMega?: boolean, - } = { - ability: formeChangeSpecies.abilities['0'], - baseStats: {}, - weighthg: formeChangeSpecies.weighthg - baseSpecies.weighthg, - heightm: ((formeChangeSpecies.heightm * 10) - (baseSpecies.heightm * 10)) / 10, - originalSpecies: formeChangeSpecies.name, - requiredItem: formeChangeSpecies.requiredItem, - }; - let statId: StatID; - for (statId in formeChangeSpecies.baseStats) { - deltas.baseStats[statId] = formeChangeSpecies.baseStats[statId] - baseSpecies.baseStats[statId]; - } - let formeType: string | null = null; - if (formeChangeSpecies.types.length > baseSpecies.types.length) { - deltas.type = formeChangeSpecies.types[1]; - } else if (formeChangeSpecies.types.length < baseSpecies.types.length) { - deltas.type = baseSpecies.types[0]; - } else if (formeChangeSpecies.types[1] !== baseSpecies.types[1]) { - deltas.type = formeChangeSpecies.types[1]; - } - if (formeChangeSpecies.isMega && !formeType) formeType = 'Mega'; - if (formeChangeSpecies.isPrimal) formeType = 'Primal'; - if (formeType) deltas.formeType = formeType; - return deltas; - }, - mutateOriginalSpecies(speciesOrForme, deltas) { - if (!deltas) throw new TypeError("Must specify deltas!"); - const species = this.dex.deepClone(this.dex.species.get(speciesOrForme)); - species.abilities = { '0': deltas.ability }; - if (species.types[0] === deltas.type) { - species.types = [deltas.type]; - } else if (deltas.type) { - species.types = [species.types[0], deltas.type]; - } - const baseStats = species.baseStats; - for (const statName in baseStats) { - baseStats[statName] = this.battle.clampIntRange(baseStats[statName] + deltas.baseStats[statName], 1, 255); - } - species.weighthg = Math.max(1, species.weighthg + deltas.weighthg); - species.heightm = Math.max(0.1, ((species.heightm * 10) + (deltas.heightm * 10)) / 10); - species.originalSpecies = deltas.originalSpecies; - species.requiredItem = deltas.requiredItem; - if (deltas.formeType === 'Mega' || deltas.isMega) species.isMega = true; - if (deltas.formeType === 'Primal') species.isPrimal = true; - return species; - }, - }, -}; diff --git a/data/mods/gen7/moves.ts b/data/mods/gen7/moves.ts index c19919fa33..5a9fa8c69e 100644 --- a/data/mods/gen7/moves.ts +++ b/data/mods/gen7/moves.ts @@ -498,10 +498,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { condition: { inherit: true, onTryHit(target, source, move) { - if (!move.flags['protect'] || move.category === 'Status') { - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target, false)) return; this.add('-activate', target, 'move: Protect'); const lockedmove = source.getVolatile('lockedmove'); if (lockedmove) { diff --git a/data/mods/gen7mixandmega/items.ts b/data/mods/gen7mixandmega/items.ts deleted file mode 100644 index f02eb9841b..0000000000 --- a/data/mods/gen7mixandmega/items.ts +++ /dev/null @@ -1,46 +0,0 @@ -export const Items: import('../../../sim/dex-items').ModdedItemDataTable = { - blueorb: { - inherit: true, - onSwitchIn(pokemon) { - if (pokemon.isActive && !pokemon.species.isPrimal && !pokemon.transformed) { - // @ts-expect-error modded - const species: Species = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Kyogre-Primal', pokemon); - if (pokemon.m.originalSpecies === 'Kyogre') { - pokemon.formeChange(species, this.effect, true); - } else { - pokemon.formeChange(species, this.effect, true); - pokemon.baseSpecies = species; - this.add('-start', pokemon, 'Blue Orb', '[silent]'); - } - } - }, - onTakeItem: false, - }, - redorb: { - inherit: true, - onSwitchIn(pokemon) { - if (pokemon.isActive && !pokemon.species.isPrimal && !pokemon.transformed) { - // @ts-expect-error modded - const species: Species = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Groudon-Primal', pokemon); - if (pokemon.m.originalSpecies === 'Groudon') { - pokemon.formeChange(species, this.effect, true); - } else { - pokemon.formeChange(species, this.effect, true); - pokemon.baseSpecies = species; - this.add('-start', pokemon, 'Red Orb', '[silent]'); - const apparentSpecies = pokemon.illusion ? pokemon.illusion.species.name : pokemon.m.originalSpecies; - const oSpecies = this.dex.species.get(apparentSpecies); - if (pokemon.illusion) { - const types = oSpecies.types; - if (types.length > 1 || types[types.length - 1] !== 'Fire') { - this.add('-start', pokemon, 'typechange', (types[0] !== 'Fire' ? types[0] + '/' : '') + 'Fire', '[silent]'); - } - } else 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]'); - } - } - } - }, - onTakeItem: false, - }, -}; diff --git a/data/mods/gen7mixandmega/scripts.ts b/data/mods/gen7mixandmega/scripts.ts deleted file mode 100644 index 8f056ff19e..0000000000 --- a/data/mods/gen7mixandmega/scripts.ts +++ /dev/null @@ -1,121 +0,0 @@ -export const Scripts: ModdedBattleScriptsData = { - gen: 7, - inherit: 'gen7', - init() { - for (const i in this.data.Items) { - if (!this.data.Items[i].megaStone) continue; - this.modData('Items', i).onTakeItem = false; - } - }, - actions: { - canMegaEvo(pokemon) { - if (pokemon.species.isMega || pokemon.species.isPrimal) return null; - - const item = pokemon.getItem(); - if (item.megaStone) { - const values = Object.values(item.megaStone); - if (values.includes(pokemon.name)) return null; - return values[0]; - } else if (pokemon.baseMoves.includes('dragonascent')) { - return 'Rayquaza-Mega'; - } else { - return null; - } - }, - runMegaEvo(pokemon) { - if (pokemon.species.isMega || pokemon.species.isPrimal) return false; - - const isUltraBurst = !pokemon.canMegaEvo; - - const species: Species = (this as any).getMixedSpecies(pokemon.m.originalSpecies, - pokemon.canMegaEvo || pokemon.canUltraBurst, pokemon); - - // Do we have a proper sprite for it? Code for when megas actually exist - if (isUltraBurst || this.dex.species.get(pokemon.canMegaEvo as any).baseSpecies === pokemon.m.originalSpecies) { - pokemon.formeChange(species, pokemon.getItem(), true); - } else { - const oSpecies = this.dex.species.get(pokemon.m.originalSpecies); - const oMegaSpecies = this.dex.species.get((species as any).originalSpecies); - pokemon.formeChange(species, pokemon.getItem(), true); - this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]'); - if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) { - this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - } - } - - pokemon.canMegaEvo = false; - if (isUltraBurst) pokemon.canUltraBurst = null; - return true; - }, - getMixedSpecies(originalForme, formeChange, pokemon) { - const originalSpecies = this.dex.species.get(originalForme); - const formeChangeSpecies = this.dex.species.get(formeChange); - if (originalSpecies.baseSpecies === formeChangeSpecies.baseSpecies) { - return formeChangeSpecies; - } - const deltas = (this as any).getFormeChangeDeltas(formeChangeSpecies, pokemon); - const species = (this as any).mutateOriginalSpecies(originalSpecies, deltas); - return species; - }, - getFormeChangeDeltas(formeChangeSpecies, pokemon) { - // Should be fine as long as Necrozma-U doesn't get added or Game Freak makes me sad with some convoluted forme change - const baseSpecies = this.dex.species.get(formeChangeSpecies.isMega ? - formeChangeSpecies.battleOnly as string : formeChangeSpecies.baseSpecies); - const deltas: { - ability: string, - baseStats: SparseStatsTable, - weighthg: number, - heightm: number, - originalSpecies: string, - requiredItem: string | undefined, - type?: string, - formeType?: string, - isMega?: boolean, - } = { - ability: formeChangeSpecies.abilities['0'], - baseStats: {}, - weighthg: formeChangeSpecies.weighthg - baseSpecies.weighthg, - heightm: ((formeChangeSpecies.heightm * 10) - (baseSpecies.heightm * 10)) / 10, - originalSpecies: formeChangeSpecies.name, - requiredItem: formeChangeSpecies.requiredItem, - }; - let statId: StatID; - for (statId in formeChangeSpecies.baseStats) { - deltas.baseStats[statId] = formeChangeSpecies.baseStats[statId] - baseSpecies.baseStats[statId]; - } - let formeType: string | null = null; - if (formeChangeSpecies.types.length > baseSpecies.types.length) { - deltas.type = formeChangeSpecies.types[1]; - } else if (formeChangeSpecies.types.length < baseSpecies.types.length) { - deltas.type = baseSpecies.types[0]; - } else if (formeChangeSpecies.types[1] !== baseSpecies.types[1]) { - deltas.type = formeChangeSpecies.types[1]; - } - if (formeChangeSpecies.isMega && !formeType) formeType = 'Mega'; - if (formeChangeSpecies.isPrimal) formeType = 'Primal'; - if (formeType) deltas.formeType = formeType; - return deltas; - }, - mutateOriginalSpecies(speciesOrForme, deltas) { - if (!deltas) throw new TypeError("Must specify deltas!"); - const species = this.dex.deepClone(this.dex.species.get(speciesOrForme)); - species.abilities = { '0': deltas.ability }; - if (species.types[0] === deltas.type) { - species.types = [deltas.type]; - } else if (deltas.type) { - species.types = [species.types[0], deltas.type]; - } - const baseStats = species.baseStats; - for (const statName in baseStats) { - baseStats[statName] = this.battle.clampIntRange(baseStats[statName] + deltas.baseStats[statName], 1, 255); - } - species.weighthg = Math.max(1, species.weighthg + deltas.weighthg); - species.heightm = Math.max(0.1, ((species.heightm * 10) + (deltas.heightm * 10)) / 10); - species.originalSpecies = deltas.originalSpecies; - species.requiredItem = deltas.requiredItem; - if (deltas.formeType === 'Mega' || deltas.isMega) species.isMega = true; - if (deltas.formeType === 'Primal') species.isPrimal = true; - return species; - }, - }, -}; diff --git a/data/mods/gen8dlc1/learnsets.ts b/data/mods/gen8dlc1/learnsets.ts index 1a2a4cddad..f5ed1c0fb2 100644 --- a/data/mods/gen8dlc1/learnsets.ts +++ b/data/mods/gen8dlc1/learnsets.ts @@ -75634,8 +75634,7 @@ export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTab zenheadbutt: ["8M"], }, eventData: [ - // TODO get actual event data - {generation: 8, level: 10, perfectIVs: 3, moves: ["rocksmash", "leer", "endure", "focusenergy"]}, + {generation: 8, level: 10, perfectIVs: 3, moves: ["rocksmash", "leer", "endure", "focusenergy"], pokeball: "pokeball"}, ], eventOnly: true, }, diff --git a/data/mods/gen8mixandmega/scripts.ts b/data/mods/gen8mixandmega/scripts.ts deleted file mode 100644 index e59a9f14ea..0000000000 --- a/data/mods/gen8mixandmega/scripts.ts +++ /dev/null @@ -1,115 +0,0 @@ -export const Scripts: ModdedBattleScriptsData = { - gen: 8, - inherit: 'gen8', - init() { - for (const i in this.data.Items) { - const item = this.data.Items[i]; - if (!item.megaStone || item.isNonstandard !== 'Past') continue; - this.modData('Items', i).onTakeItem = false; - this.modData('Items', i).isNonstandard = null; - if (item.megaStone) { - for (const megaEvo of Object.values(item.megaStone)) { - this.modData('FormatsData', this.toID(megaEvo)).isNonstandard = null; - } - } - } - }, - actions: { - canMegaEvo(pokemon) { - if (pokemon.species.isMega) return null; - - const item = pokemon.getItem(); - if (!item.megaStone) return null; - return Object.values(item.megaStone)[0]; - }, - runMegaEvo(pokemon) { - if (pokemon.species.isMega) return false; - - const species: Species = (this as any).getMixedSpecies(pokemon.m.originalSpecies, pokemon.canMegaEvo, pokemon); - - /* Do we have a proper sprite for it? Code for when megas actually exist - if (this.dex.species.get(pokemon.canMegaEvo!).baseSpecies === pokemon.m.originalSpecies) { - pokemon.formeChange(species, pokemon.getItem(), true); - } else { */ - const oSpecies = this.dex.species.get(pokemon.m.originalSpecies); - const oMegaSpecies = this.dex.species.get((species as any).originalSpecies); - pokemon.formeChange(species, pokemon.getItem(), true); - this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]'); - if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) { - this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]'); - } - // } - - pokemon.canMegaEvo = false; - return true; - }, - getMixedSpecies(originalForme, formeChange, pokemon) { - const originalSpecies = this.dex.species.get(originalForme); - const formeChangeSpecies = this.dex.species.get(formeChange); - const deltas = (this as any).getFormeChangeDeltas(formeChangeSpecies, pokemon); - const species = (this as any).mutateOriginalSpecies(originalSpecies, deltas); - return species; - }, - getFormeChangeDeltas(formeChangeSpecies, pokemon) { - // Should be fine as long as Necrozma-U doesn't get added or Game Freak makes me sad with some convoluted forme change - let baseSpecies = this.dex.species.get(formeChangeSpecies.isMega ? - formeChangeSpecies.battleOnly as string : formeChangeSpecies.baseSpecies); - if (formeChangeSpecies.name === 'Zygarde-Mega') { - baseSpecies = this.dex.species.get('Zygarde-Complete'); - } - const deltas: { - ability: string, - baseStats: SparseStatsTable, - weighthg: number, - heightm: number, - originalSpecies: string, - requiredItem: string | undefined, - type?: string, - formeType?: string, - isMega?: boolean, - } = { - ability: formeChangeSpecies.abilities['0'], - baseStats: {}, - weighthg: formeChangeSpecies.weighthg - baseSpecies.weighthg, - heightm: ((formeChangeSpecies.heightm * 10) - (baseSpecies.heightm * 10)) / 10, - originalSpecies: formeChangeSpecies.name, - requiredItem: formeChangeSpecies.requiredItem, - }; - let statId: StatID; - for (statId in formeChangeSpecies.baseStats) { - deltas.baseStats[statId] = formeChangeSpecies.baseStats[statId] - baseSpecies.baseStats[statId]; - } - if (formeChangeSpecies.types.length > baseSpecies.types.length) { - deltas.type = formeChangeSpecies.types[1]; - } else if (formeChangeSpecies.types.length < baseSpecies.types.length) { - deltas.type = 'mono'; - } else if (formeChangeSpecies.types[1] !== baseSpecies.types[1]) { - deltas.type = formeChangeSpecies.types[1]; - } - deltas.isMega = true; - return deltas; - }, - mutateOriginalSpecies(speciesOrForme, deltas) { - if (!deltas) throw new TypeError("Must specify deltas!"); - const species = this.dex.deepClone(this.dex.species.get(speciesOrForme)); - species.abilities = { '0': deltas.ability }; - if (species.types[0] === deltas.type) { - species.types = [deltas.type]; - } else if (deltas.type === 'mono') { - species.types = [species.types[0]]; - } else if (deltas.type) { - species.types = [species.types[0], deltas.type]; - } - const baseStats = species.baseStats; - for (const statName in baseStats) { - baseStats[statName] = this.battle.clampIntRange(baseStats[statName] + deltas.baseStats[statName], 1, 255); - } - species.weighthg = Math.max(1, species.weighthg + deltas.weighthg); - species.heightm = Math.max(0.1, ((species.heightm * 10) + (deltas.heightm * 10)) / 10); - species.originalSpecies = deltas.originalSpecies; - species.requiredItem = deltas.requiredItem; - if (deltas.isMega) species.isMega = true; - return species; - }, - }, -}; diff --git a/data/mods/gen9dlc1/scripts.ts b/data/mods/gen9dlc1/scripts.ts index 7c97daa056..c8d77bc7e9 100644 --- a/data/mods/gen9dlc1/scripts.ts +++ b/data/mods/gen9dlc1/scripts.ts @@ -11,7 +11,7 @@ export const Scripts: ModdedBattleScriptsData = { } if (pokemon.species.baseSpecies === 'Ogerpon' && !['Fire', 'Grass', 'Rock', 'Water'].includes(pokemon.teraType) && (!pokemon.illusion || pokemon.illusion.species.baseSpecies === 'Ogerpon')) { - this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game softlocks."); + this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game crashes.", false, pokemon.side); return; } @@ -87,16 +87,18 @@ export const Scripts: ModdedBattleScriptsData = { this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType); this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower); this.timesAttacked = pokemon.timesAttacked; - for (const moveSlot of pokemon.moveSlots) { + for (const [i, moveSlot] of pokemon.moveSlots.entries()) { let moveName = moveSlot.move; if (moveSlot.id === 'hiddenpower') { moveName = 'Hidden Power ' + this.hpType; } + const move = this.battle.dex.moves.get(moveSlot.id); + const pp = Math.min(5, move.pp); this.moveSlots.push({ move: moveName, id: moveSlot.id, - pp: moveSlot.maxpp === 1 ? 1 : 5, - maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp, + pp, + maxpp: this.battle.gen >= 5 ? pp : this.battle.calculatePP(move, this.ppUps[i] || 0), target: moveSlot.target, disabled: false, used: false, diff --git a/data/mods/gen9legendsou/abilities.ts b/data/mods/gen9legendsou/abilities.ts index 69612df64f..770a01461d 100644 --- a/data/mods/gen9legendsou/abilities.ts +++ b/data/mods/gen9legendsou/abilities.ts @@ -7,4 +7,12 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa inherit: true, isNonstandard: null, }, + piercingdrill: { + inherit: true, + isNonstandard: null, + }, + spicyspray: { + inherit: true, + isNonstandard: null, + }, }; diff --git a/data/mods/gen9legendsou/pokedex.ts b/data/mods/gen9legendsou/pokedex.ts index 8d8a5d0894..ac1e5969ce 100644 --- a/data/mods/gen9legendsou/pokedex.ts +++ b/data/mods/gen9legendsou/pokedex.ts @@ -1,12 +1,4 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { - clefablemega: { - inherit: true, - abilities: { 0: "Prankster" }, - }, - victreebelmega: { - inherit: true, - abilities: { 0: "Triage" }, - }, raichumegax: { inherit: true, abilities: { 0: "Levitate" }, @@ -18,11 +10,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable starmiemega: { inherit: true, baseStats: { hp: 60, atk: 100, def: 105, spa: 130, spd: 105, spe: 120 }, - abilities: { 0: "Pure Power" }, - }, - dragonitemega: { - inherit: true, - abilities: { 0: "Sheer Force" }, }, ampharosmega: { inherit: true, @@ -32,14 +19,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable inherit: true, abilities: { 0: "Technician" }, }, - chimechomega: { - inherit: true, - abilities: { 0: "Levitate" }, - }, - skarmorymega: { - inherit: true, - abilities: { 0: "Tough Claws" }, - }, mawilemega: { inherit: true, baseStats: { hp: 50, atk: 105, def: 125, spa: 55, spd: 95, spe: 50 }, @@ -56,10 +35,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable inherit: true, abilities: { 0: "Sharpness" }, }, - froslassmega: { - inherit: true, - abilities: { 0: "Snow Warning" }, - }, garchompmegaz: { inherit: true, abilities: { 0: "Rough Skin" }, @@ -76,14 +51,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable inherit: true, abilities: { 0: "Dark Aura" }, }, - excadrillmega: { - inherit: true, - abilities: { 0: "Sand Rush" }, - }, - golurkmega: { - inherit: true, - abilities: { 0: "Adaptability" }, - }, audinomega: { inherit: true, abilities: { 0: "Regenerator" }, @@ -100,18 +67,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable inherit: true, abilities: { 0: "Hadron Engine" }, }, - chandeluremega: { - inherit: true, - abilities: { 0: "Magic Guard" }, - }, - meowsticmmega: { - inherit: true, - abilities: { 0: "Psychic Surge" }, - }, - meowsticfmega: { - inherit: true, - abilities: { 0: "Psychic Surge" }, - }, pyroarmega: { inherit: true, abilities: { 0: "Drought" }, @@ -120,10 +75,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable inherit: true, abilities: { 0: "Regenerator" }, }, - floettemega: { - inherit: true, - abilities: { 0: "Regenerator" }, - }, malamarmega: { inherit: true, abilities: { 0: "Contrary" }, @@ -132,26 +83,14 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable inherit: true, abilities: { 0: "Tough Claws" }, }, - hawluchamega: { - inherit: true, - abilities: { 0: "Stamina" }, - }, zygardemega: { inherit: true, abilities: { 0: "Aura Break" }, }, - crabominablemega: { - inherit: true, - abilities: { 0: "Ice Scales" }, - }, golisopodmega: { inherit: true, abilities: { 0: "Heatproof" }, }, - drampamega: { - inherit: true, - abilities: { 0: "Adaptability" }, - }, magearnamega: { inherit: true, abilities: { 0: "Soul-Heart" }, @@ -168,14 +107,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable inherit: true, abilities: { 0: "Dauntless Shield" }, }, - scovillainmega: { - inherit: true, - abilities: { 0: "Contrary" }, - }, - glimmoramega: { - inherit: true, - abilities: { 0: "Levitate" }, - }, tatsugiricurlymega: { inherit: true, abilities: { 0: "Drizzle" }, diff --git a/data/mods/gen9predlc/learnsets.ts b/data/mods/gen9predlc/learnsets.ts index dbda02fd31..e3665fe840 100644 --- a/data/mods/gen9predlc/learnsets.ts +++ b/data/mods/gen9predlc/learnsets.ts @@ -82360,8 +82360,7 @@ export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTab zenheadbutt: ["9M", "8M"], }, eventData: [ - // TODO get actual event data - {generation: 8, level: 10, perfectIVs: 3, moves: ["rocksmash", "leer", "endure", "focusenergy"]}, + {generation: 8, level: 10, perfectIVs: 3, moves: ["rocksmash", "leer", "endure", "focusenergy"], pokeball: "pokeball"}, ], eventOnly: true, }, diff --git a/data/mods/gen9predlc/moves.ts b/data/mods/gen9predlc/moves.ts index 1af9032814..6c66c3f344 100644 --- a/data/mods/gen9predlc/moves.ts +++ b/data/mods/gen9predlc/moves.ts @@ -37,7 +37,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { }, jetpunch: { inherit: true, - hasSheerForce: true, + hasSheerForceBoost: true, }, matchagotcha: { inherit: true, diff --git a/data/mods/gen9regeneration/abilities.ts b/data/mods/gen9regeneration/abilities.ts new file mode 100644 index 0000000000..777b39548f --- /dev/null +++ b/data/mods/gen9regeneration/abilities.ts @@ -0,0 +1,277 @@ +export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { + // new + wingsofvictory: { + onStart(pokemon) { + if (pokemon.side.foe.totalFainted) { + this.add('-activate', pokemon, 'ability: Wings of Victory'); + const fallen = Math.min(pokemon.side.foe.totalFainted, 5); + this.add('-start', pokemon, `fallen${fallen}`, '[silent]'); + this.effectState.fallen = fallen; + } + }, + onEnd(pokemon) { + this.add('-end', pokemon, `fallen${this.effectState.fallen}`, '[silent]'); + }, + onBasePowerPriority: 21, + onBasePower(basePower, attacker, defender, move) { + if (this.effectState.fallen) { + const powMod = [4096, 4506, 4915, 5325, 5734, 6144]; + this.debug(`Wings of Victory boost: ${powMod[this.effectState.fallen]}/4096`); + return this.chainModify([powMod[this.effectState.fallen], 4096]); + } + }, + name: "Wings of Victory", + shortDesc: "This Pokemon's moves have 10% more power for each fainted foe, up to 5 foes.", + rating: 3.5, + }, + galaxybrain: { + onStart(pokemon) { + let totalatk = 0; + let totalspa = 0; + for (const target of pokemon.side.foe.active) { + if (!target || target.fainted) continue; + totalatk += target.getStat('atk', false, true); + totalspa += target.getStat('spa', false, true); + } + if (totalatk && totalatk >= totalspa) { + this.boost({ def: 1 }); + } else if (totalspa) { + this.boost({ spd: 1 }); + } + }, + name: "Galaxy Brain", + shortDesc: "On switch-in, Defense or Sp. Def is raised 1 stage based on the foes' stronger offense.", + rating: 4, + }, + blackout: { + onStart(source) { + this.field.addPseudoWeather('magicroom', source); + /* let activated = false; + for (const pokemon of this.getAllActive()) { + if (!activated) { + this.add('-ability', source, 'Blackout'); + } + activated = true; + if (!pokemon.volatiles['embargo']) { + pokemon.addVolatile('embargo'); + } + } */ + }, + /* onAnySwitchIn(pokemon) { + if (!pokemon.volatiles['embargo']) { + pokemon.addVolatile('embargo'); + } + }, */ + onEnd(pokemon) { + this.field.removePseudoWeather('magicroom'); + /* for (const target of this.getAllActive()) { + if (target === pokemon) continue; + if (target.hasAbility('blackout')) return; + } + for (const target of this.getAllActive()) { + target.removeVolatile('embargo'); + } */ + }, + name: "Blackout", + shortDesc: "While this Pokemon is active, all held items are disabled.", + rating: 5, + }, + excavate: { + onSwitchIn(pokemon) { + let activated = false; + for (const sideCondition of ['spikes', 'stealthrock']) { + if (pokemon.side.getSideCondition(sideCondition) && !pokemon.side.getSideCondition('excavate')) { + if (!activated) { + this.add('-activate', pokemon, 'ability: Excavate'); + activated = true; + } + } + if (pokemon.side.getSideCondition('spikes') && !pokemon.side.getSideCondition('excavate')) { + this.add('-sideend', pokemon.side, 'move: Spikes', `[of] ${pokemon}`); + pokemon.side.removeSideCondition('spikes'); + this.boost({ def: 1 }, pokemon); + pokemon.side.addSideCondition('excavate'); + } + if (pokemon.side.getSideCondition('stealthrock') && !pokemon.side.getSideCondition('excavate')) { + this.add('-sideend', pokemon.side, 'move: Stealth Rock', `[of] ${pokemon}`); + pokemon.side.removeSideCondition('stealthrock'); + this.boost({ def: 1 }, pokemon); + pokemon.side.addSideCondition('excavate'); + } + } + }, + condition: { + onSideStart(side) { + this.add('-sidestart', side, 'move: Excavate Used'); + }, + }, + name: "Excavate", + shortDesc: "Once per game. Removes Stealth Rock and Spikes on switch-in, +1 Def for each hazard removed.", + rating: 4, + }, + lifeguard: { + onDamagingHit(damage, target, source, move) { + if (move.type === 'Water') { + this.boost({ def: 1 }); + } + }, + onModifySecondaries(secondaries, target, source, move) { + if (move.type === 'Water') return; + this.debug('Lifeguard prevent secondary'); + return secondaries.filter(effect => !!effect.self); + }, + name: "Lifeguard", + shortDesc: "Boosts Defense when hit by a Water move; blocks additional effects of Water moves.", + rating: 3, + }, + ballooning: { + onDamage(damage, target, source, effect) { + if ( + effect.effectType === "Move" && + !effect.multihit && + !(effect.hasSheerForce && source.hasAbility('sheerforce')) + ) { + this.effectState.checkedBallooning = false; + } else { + this.effectState.checkedBallooning = true; + } + }, + onTryEatItem(item) { + const healingItems = [ + 'aguavberry', 'enigmaberry', 'figyberry', 'iapapaberry', + 'magoberry', 'sitrusberry', 'wikiberry', 'oranberry', 'berryjuice', + ]; + if (healingItems.includes(item.id)) { + return this.effectState.checkedBallooning; + } + return true; + }, + onAfterMoveSecondary(target, source, move) { + this.effectState.checkedBallooning = true; + if (!source || source === target || !target.hp || !move.totalDamage) return; + const lastAttackedBy = target.getLastAttackedBy(); + if (!lastAttackedBy) return; + const damage = move.multihit ? move.totalDamage : lastAttackedBy.damage; + if (target.hp <= target.maxhp / 2 && target.hp + damage > target.maxhp / 2) { + this.boost({ atk: 1, spa: 1, spe: 1 }, target, target); + target.addVolatile('perishsong'); + } + }, + name: "Ballooning", + shortDesc: "At 1/2 or less of this Pokemon's max HP: +1 Atk, Sp. Atk, Spe, and gains the Perish Song effect.", + rating: 4, + }, + ofafeather: { + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Flying') { + this.debug('Of A Feather boost'); + return this.chainModify(1.5); + } + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { + if (move.type === 'Flying') { + this.debug('Of A Feather boost'); + return this.chainModify(1.5); + } + }, + name: "Of A Feather", + rating: 3.5, + shortDesc: "This Pokemon's Flying-type moves have 1.5x power.", + }, + patriarch: { + onStart(pokemon) { + if (pokemon.side.pokemon.filter(ally => ally === pokemon || !ally.fainted && !ally.status)) { + this.add('-activate', pokemon, 'ability: Patriarch'); + const healthy = Math.min(pokemon.side.pokemon + .filter(ally => ally === pokemon || !ally.fainted && !ally.status).length, 5); + this.add('-start', pokemon, `healthy{healthy}`, '[silent]'); + this.effectState.healthy = healthy; + } + }, + onEnd(pokemon) { + this.add('-end', pokemon, `healthy${this.effectState.healthy}`, '[silent]'); + }, + onBasePowerPriority: 21, + onBasePower(basePower, attacker, defender, move) { + if (this.effectState.healthy) { + const powMod = [4096, 4506, 4915, 5325, 5734, 6144]; + this.debug(`Patriach boost: ${powMod[this.effectState.healthy]}/4096`); + return this.chainModify([powMod[this.effectState.healthy], 4096]); + } + }, + name: "Patriarch", + shortDesc: "This Pokemon's moves have 10% more power for each of its healthy allies.", + rating: 3.5, + }, + violentabandon: { + onAfterUseItem(item, pokemon) { + if ( + pokemon !== this.effectState.target && + pokemon.baseSpecies.baseSpecies !== 'Gyarados' || + pokemon.transformed + ) { + return; + } + if (pokemon.species.forme !== 'Mega') { + pokemon.formeChange('Gyarados-Mega', this.effect, true); + } + }, + onTakeItem(item, pokemon) { + if ( + pokemon !== this.effectState.target && + pokemon.baseSpecies.baseSpecies !== 'Gyarados' || + pokemon.transformed + ) { + return; + } + if (pokemon.species.forme !== 'Mega') { + pokemon.formeChange('Gyarados-Mega', this.effect, true); + } + }, + flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 }, + name: "Violent Abandon", + shortDesc: "This Pokemon transforms into Mega Gyarados whenever its item is used or lost.", + rating: 3.5, + }, + tropicalcurrent: { + onDamagePriority: 1, + onDamage(damage, target, source, effect) { + if (effect.id === 'brn') { + this.heal(target.baseMaxhp / 8); + return false; + } + }, + name: "Tropical Current", + shortDesc: "This Pokemon restored 1/8 of its max HP per turn if it's burned. Ignores burn attack drop.", + rating: 4, + }, + bullspirit: { + onAfterMoveSecondarySelf(source, target, move) { + if (!move || source.switchFlag === true || !move.hitTargets || move.type !== 'Normal') return; + this.add('-ability', source, 'Bull Spirit'); + this.add('-message', `${source.name}'s next attack will be physical!`); + source.addVolatile('bullspirit'); + }, + condition: { + onStart(target) { + this.add('-start', target, 'ability: Bull Spirit'); + }, + duration: 2, + onModifyMovePriority: 8, + onModifyMove(move, pokemon) { + if (move.category !== "Status") { + move.category = "Physical"; + } + }, + onEnd(target) { + this.add('-end', target, 'ability: Bull Spirit', '[silent]'); + }, + }, + flags: {}, + name: "Bull Spirit", + rating: 1, + shortDesc: "After using a Normal-type move, the user's next attack will always be physical.", + }, +}; diff --git a/data/mods/gen9regeneration/formats-data.ts b/data/mods/gen9regeneration/formats-data.ts new file mode 100644 index 0000000000..b409dc025c --- /dev/null +++ b/data/mods/gen9regeneration/formats-data.ts @@ -0,0 +1,674 @@ +export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = { + bulbasaur: { + tier: "LC", + doublesTier: "LC", + }, + ivysaur: { + tier: "NFE", + doublesTier: "NFE", + }, + venusaur: { + tier: "OU", + doublesTier: "DOU", + }, + venusaurmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + charmander: { + tier: "LC", + doublesTier: "LC", + }, + charmeleon: { + tier: "NFE", + doublesTier: "NFE", + }, + charizard: { + tier: "OU", + doublesTier: "DOU", + }, + charizardmegax: { + isNonstandard: "Past", + tier: "Illegal", + }, + charizardmegay: { + isNonstandard: "Past", + tier: "Illegal", + }, + squirtle: { + tier: "LC", + doublesTier: "LC", + }, + wartortle: { + tier: "NFE", + doublesTier: "NFE", + }, + blastoise: { + tier: "OU", + doublesTier: "DOU", + }, + blastoisemega: { + isNonstandard: "Past", + tier: "Illegal", + }, + caterpie: { + tier: "LC", + doublesTier: "LC", + }, + metapod: { + tier: "NFE", + doublesTier: "NFE", + }, + butterfree: { + tier: "OU", + doublesTier: "DOU", + }, + weedle: { + tier: "LC", + doublesTier: "LC", + }, + kakuna: { + tier: "NFE", + doublesTier: "NFE", + }, + beedrill: { + tier: "OU", + doublesTier: "DOU", + }, + beedrillmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + pidgey: { + tier: "LC", + doublesTier: "LC", + }, + pidgeotto: { + tier: "NFE", + doublesTier: "NFE", + }, + pidgeot: { + tier: "OU", + doublesTier: "DOU", + }, + pidgeotmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + rattata: { + tier: "LC", + doublesTier: "LC", + }, + raticate: { + tier: "OU", + doublesTier: "DOU", + }, + spearow: { + tier: "LC", + doublesTier: "LC", + }, + fearow: { + tier: "OU", + doublesTier: "DOU", + }, + ekans: { + tier: "LC", + doublesTier: "LC", + }, + arbok: { + tier: "OU", + doublesTier: "DOU", + }, + pikachu: { + tier: "LC", + doublesTier: "LC", + }, + raichu: { + tier: "OU", + doublesTier: "DOU", + }, + sandshrew: { + tier: "LC", + doublesTier: "LC", + }, + sandslash: { + tier: "OU", + doublesTier: "DOU", + }, + nidoranf: { + tier: "LC", + doublesTier: "LC", + }, + nidorina: { + tier: "NFE", + doublesTier: "NFE", + }, + nidoqueen: { + tier: "OU", + doublesTier: "DOU", + }, + nidoranm: { + tier: "LC", + doublesTier: "LC", + }, + nidorino: { + tier: "NFE", + doublesTier: "NFE", + }, + nidoking: { + tier: "OU", + doublesTier: "DOU", + }, + cleffa: { + tier: "LC", + doublesTier: "LC", + }, + clefairy: { + tier: "NFE", + doublesTier: "NFE", + }, + clefable: { + tier: "OU", + doublesTier: "DOU", + }, + vulpix: { + tier: "LC", + doublesTier: "LC", + }, + ninetales: { + tier: "OU", + doublesTier: "DOU", + }, + igglybuff: { + tier: "LC", + doublesTier: "LC", + }, + jigglypuff: { + tier: "NFE", + doublesTier: "NFE", + }, + wigglytuff: { + tier: "OU", + doublesTier: "DOU", + }, + zubat: { + tier: "LC", + doublesTier: "LC", + }, + golbat: { + tier: "OU", + doublesTier: "DOU", + }, + oddish: { + tier: "LC", + doublesTier: "LC", + }, + gloom: { + tier: "NFE", + doublesTier: "NFE", + }, + vileplume: { + tier: "OU", + doublesTier: "DOU", + }, + paras: { + tier: "LC", + doublesTier: "LC", + }, + parasect: { + tier: "OU", + doublesTier: "DOU", + }, + venonat: { + tier: "LC", + doublesTier: "LC", + }, + venomoth: { + tier: "OU", + doublesTier: "DOU", + }, + diglett: { + tier: "LC", + doublesTier: "LC", + }, + dugtrio: { + tier: "OU", + doublesTier: "DOU", + }, + meowth: { + tier: "LC", + doublesTier: "LC", + }, + persian: { + tier: "OU", + doublesTier: "DOU", + }, + psyduck: { + tier: "LC", + doublesTier: "LC", + }, + golduck: { + tier: "OU", + doublesTier: "DOU", + }, + mankey: { + tier: "LC", + doublesTier: "LC", + }, + primeape: { + tier: "OU", + doublesTier: "DOU", + }, + growlithe: { + tier: "LC", + doublesTier: "LC", + }, + arcanine: { + tier: "OU", + doublesTier: "DOU", + }, + poliwag: { + tier: "LC", + doublesTier: "LC", + }, + poliwhirl: { + tier: "NFE", + doublesTier: "NFE", + }, + poliwrath: { + tier: "OU", + doublesTier: "DOU", + }, + abra: { + tier: "LC", + doublesTier: "LC", + }, + kadabra: { + tier: "NFE", + doublesTier: "NFE", + }, + alakazam: { + tier: "OU", + doublesTier: "DOU", + }, + alakazammega: { + isNonstandard: "Past", + tier: "Illegal", + }, + machop: { + tier: "LC", + doublesTier: "LC", + }, + machoke: { + tier: "NFE", + doublesTier: "NFE", + }, + machamp: { + tier: "OU", + doublesTier: "DOU", + }, + bellsprout: { + tier: "LC", + doublesTier: "LC", + }, + weepinbell: { + tier: "NFE", + doublesTier: "NFE", + }, + victreebel: { + tier: "OU", + doublesTier: "DOU", + }, + tentacool: { + tier: "LC", + doublesTier: "LC", + }, + tentacruel: { + tier: "OU", + doublesTier: "DOU", + }, + geodude: { + tier: "LC", + doublesTier: "LC", + }, + graveler: { + tier: "NFE", + doublesTier: "NFE", + }, + golem: { + tier: "OU", + doublesTier: "DOU", + }, + ponyta: { + tier: "LC", + doublesTier: "LC", + }, + rapidash: { + tier: "OU", + doublesTier: "DOU", + }, + slowpoke: { + tier: "LC", + doublesTier: "LC", + }, + slowbro: { + tier: "OU", + doublesTier: "DOU", + }, + slowbromega: { + isNonstandard: "Past", + tier: "Illegal", + }, + magnemite: { + tier: "LC", + doublesTier: "LC", + }, + magneton: { + tier: "OU", + doublesTier: "DOU", + }, + farfetchd: { + tier: "OU", + doublesTier: "DOU", + }, + doduo: { + tier: "LC", + doublesTier: "LC", + }, + dodrio: { + tier: "OU", + doublesTier: "DOU", + }, + seel: { + tier: "LC", + doublesTier: "LC", + }, + dewgong: { + tier: "OU", + doublesTier: "DOU", + }, + grimer: { + tier: "LC", + doublesTier: "LC", + }, + muk: { + tier: "OU", + doublesTier: "DOU", + }, + shellder: { + tier: "LC", + doublesTier: "LC", + }, + cloyster: { + tier: "OU", + doublesTier: "DOU", + }, + gastly: { + tier: "LC", + doublesTier: "LC", + }, + haunter: { + tier: "NFE", + doublesTier: "NFE", + }, + gengar: { + tier: "OU", + doublesTier: "DOU", + }, + gengarmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + onix: { + tier: "OU", + doublesTier: "DOU", + }, + drowzee: { + tier: "LC", + doublesTier: "LC", + }, + hypno: { + tier: "OU", + doublesTier: "DOU", + }, + krabby: { + tier: "LC", + doublesTier: "LC", + }, + kingler: { + tier: "OU", + doublesTier: "DOU", + }, + voltorb: { + tier: "LC", + doublesTier: "LC", + }, + electrode: { + tier: "OU", + doublesTier: "DOU", + }, + exeggcute: { + tier: "LC", + doublesTier: "LC", + }, + exeggutor: { + tier: "OU", + doublesTier: "DOU", + }, + cubone: { + tier: "LC", + doublesTier: "LC", + }, + marowak: { + tier: "OU", + doublesTier: "DOU", + }, + hitmonlee: { + tier: "OU", + doublesTier: "DOU", + }, + hitmonchan: { + tier: "OU", + doublesTier: "DOU", + }, + lickitung: { + tier: "LC", + doublesTier: "LC", + }, + koffing: { + tier: "LC", + doublesTier: "LC", + }, + weezing: { + tier: "OU", + doublesTier: "DOU", + }, + rhyhorn: { + tier: "LC", + doublesTier: "LC", + }, + rhydon: { + tier: "OU", + doublesTier: "DOU", + }, + chansey: { + tier: "OU", + doublesTier: "DOU", + }, + tangela: { + tier: "OU", + doublesTier: "DOU", + }, + kangaskhan: { + tier: "OU", + doublesTier: "DOU", + }, + kangaskhanmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + horsea: { + tier: "LC", + doublesTier: "LC", + }, + seadra: { + tier: "OU", + doublesTier: "DOU", + }, + goldeen: { + tier: "LC", + doublesTier: "LC", + }, + seaking: { + tier: "OU", + doublesTier: "DOU", + }, + staryu: { + tier: "LC", + doublesTier: "LC", + }, + starmie: { + tier: "OU", + doublesTier: "DOU", + }, + mrmime: { + tier: "OU", + doublesTier: "DOU", + }, + scyther: { + tier: "OU", + doublesTier: "DOU", + }, + jynx: { + tier: "OU", + doublesTier: "DOU", + }, + electabuzz: { + tier: "OU", + doublesTier: "DOU", + }, + magmar: { + tier: "OU", + doublesTier: "DOU", + }, + pinsir: { + tier: "OU", + doublesTier: "DOU", + }, + pinsirmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + tauros: { + tier: "OU", + doublesTier: "DOU", + }, + magikarp: { + tier: "LC", + doublesTier: "LC", + }, + gyarados: { + tier: "OU", + doublesTier: "DOU", + }, + gyaradosmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + lapras: { + tier: "OU", + doublesTier: "DOU", + }, + ditto: { + tier: "OU", + doublesTier: "DOU", + }, + eevee: { + tier: "LC", + doublesTier: "LC", + }, + vaporeon: { + tier: "OU", + doublesTier: "DOU", + }, + jolteon: { + tier: "OU", + doublesTier: "DOU", + }, + flareon: { + tier: "OU", + doublesTier: "DOU", + }, + porygon: { + tier: "OU", + doublesTier: "DOU", + }, + omanyte: { + tier: "LC", + doublesTier: "LC", + }, + omastar: { + tier: "OU", + doublesTier: "DOU", + }, + kabuto: { + tier: "LC", + doublesTier: "LC", + }, + kabutops: { + tier: "OU", + doublesTier: "DOU", + }, + aerodactyl: { + tier: "OU", + doublesTier: "DOU", + }, + aerodactylmega: { + isNonstandard: "Past", + tier: "Illegal", + }, + snorlax: { + tier: "OU", + doublesTier: "DOU", + }, + articuno: { + tier: "OU", + doublesTier: "DOU", + }, + zapdos: { + tier: "OU", + doublesTier: "DOU", + }, + moltres: { + tier: "OU", + doublesTier: "DOU", + }, + dratini: { + tier: "LC", + doublesTier: "LC", + }, + dragonair: { + tier: "NFE", + doublesTier: "NFE", + }, + dragonite: { + tier: "OU", + doublesTier: "DOU", + }, + mewtwo: { + isNonstandard: "Past", + tier: "Illegal", + }, + mewtwomegax: { + isNonstandard: "Past", + tier: "Illegal", + }, + mewtwomegay: { + isNonstandard: "Past", + tier: "Illegal", + }, + mew: { + tier: "OU", + doublesTier: "DOU", + }, +}; diff --git a/data/mods/gen9regeneration/moves.ts b/data/mods/gen9regeneration/moves.ts new file mode 100644 index 0000000000..5c61416b6c --- /dev/null +++ b/data/mods/gen9regeneration/moves.ts @@ -0,0 +1,573 @@ +export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { + // new + vitalenergy: { + accuracy: 100, + basePower: 150, + basePowerCallback(pokemon, target, move) { + return move.basePower * pokemon.hp / pokemon.maxhp; + }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Seed Flare", target); + }, + category: "Special", + name: "Vital Energy", + shortDesc: "Less power as user's HP decreases. Hits foe(s).", + pp: 5, + priority: 0, + flags: { protect: 1, mirror: 1 }, + secondary: undefined, + target: "allAdjacentFoes", + type: "Grass", + contestType: "Beautiful", + }, + smokytorment: { + accuracy: true, + basePower: 75, + category: "Physical", + name: "Smoky Torment", + shortDesc: "Applies the Torment effect on opponent.", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Outrage", target); + }, + secondary: { + chance: 100, + volatileStatus: 'torment', + }, + target: "normal", + type: "Dark", + contestType: "Cool", + }, + powerwash: { + accuracy: 100, + basePower: 50, + category: "Special", + name: "Power Wash", + shortDesc: "Removes all hazards in the field. If any are cleared, the user heals for 50% of its maximum HP.", + pp: 40, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + onHit(target, source, move) { + let success = false; + const removeAll = [ + 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge', + ]; + for (const sideCondition of removeAll) { + if (source.side.removeSideCondition(sideCondition)) { + this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Power Wash', `[of] ${source}`); + success = true; + } + } + this.heal(Math.ceil(source.maxhp * 0.5), source); + return success; + }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Volt Switch", target); + }, + target: "normal", + type: "Water", + contestType: "Cool", + }, + brainwave: { + accuracy: 100, + basePower: 70, + category: "Special", + name: "Brainwave", + shortDesc: "Uses user's Special Defense stat as Special Attack in damage calculation.", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + overrideOffensiveStat: 'spd', + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Expanding Force", target); + }, + secondary: undefined, + target: "normal", + type: "Psychic", + }, + illwind: { + accuracy: 100, + basePower: 100, + category: "Special", + name: "Ill Wind", + shortDesc: "Lowers the user's Sp. Atk by 1, drains 25% damage, heals another 25% for each neg SpA boost.", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1, heal: 1 }, + self: { + boosts: { + spa: -1, + }, + }, + drain: [1, 4], + /* onModifyMove(move, pokemon) { + move.drain = [pokemon.negativeBoosts.spa(), 4]; + }, */ + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Icy Wind", target); + }, + secondary: undefined, + target: "normal", + type: "Ice", + contestType: "Clever", + }, + guardiandive: { + accuracy: 100, + basePower: 75, + category: "Physical", + name: "Guardian Dive", + shortDesc: "Uses user's Defense stat as Attack in damage calculation.", + pp: 10, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + overrideOffensiveStat: 'def', + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Acrobatics", target); + }, + secondary: undefined, + target: "normal", + type: "Flying", + }, + coralcrash: { + accuracy: 100, + basePower: 120, + category: "Physical", + name: "Coral Crash", + shortDesc: "33% recoil. 10% chance to poison.", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + secondary: { + chance: 10, + status: 'psn', + }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Aqua Tail", target); + }, + recoil: [33, 100], + target: "normal", + type: "Poison", + contestType: "Tough", + }, + slipaway: { + accuracy: 100, + basePower: 50, + category: "Physical", + name: "Slip Away", + shortDesc: "100% chance to lower the target's Attack by 1, switches the user out.", + pp: 20, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + secondary: { + chance: 100, + boosts: { + atk: -1, + }, + }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Aqua Tail", target); + }, + selfSwitch: true, + target: "normal", + type: "Water", + zMove: { effect: 'healreplacement' }, + contestType: "Cool", + }, + flareout: { + accuracy: 100, + basePower: 70, + category: "Physical", + name: "Flare Out", + shortDesc: "100% chance to lower the target's Defense by 1, switches the user out.", + pp: 20, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + secondary: { + chance: 100, + boosts: { + def: -1, + }, + }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Flame Charge", target); + }, + selfSwitch: true, + target: "normal", + type: "Fire", + zMove: { effect: 'healreplacement' }, + contestType: "Cool", + }, + buzzoff: { + accuracy: 100, + basePower: 60, + category: "Special", + name: "Buzz Off", + shortDesc: "100% chance to lower the target's Speed by 1, switches the user out.", + pp: 20, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + secondary: { + chance: 100, + boosts: { + spe: -1, + }, + }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Volt Switch", target); + }, + selfSwitch: true, + target: "normal", + type: "Electric", + zMove: { effect: 'healreplacement' }, + contestType: "Cool", + }, + powdergale: { + accuracy: 100, + basePower: 75, + category: "Special", + name: "Powder Gale", + shortDesc: "100% chance to poison. Harshly lowers a random one of the target's stats.", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1, wind: 1, metronome: 1 }, + onHit(target) { + const stats: BoostID[] = []; + let stat: BoostID; + for (stat in target.boosts) { + if (stat === 'accuracy' || stat === 'evasion') continue; + if (target.boosts[stat] > -6) { + stats.push(stat); + } + } + if (stats.length) { + const randomStat = this.sample(stats); + const boost: SparseBoostsTable = {}; + boost[randomStat] = -2; + this.boost(boost); + } else { + return; + } + }, + secondary: { + chance: 100, + status: 'psn', + }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Silver Wind", target); + }, + target: "normal", + type: "Bug", + contestType: "Clever", + }, + splashback: { + accuracy: 100, + basePower: 50, + basePowerCallback(pokemon) { + return Math.min(300, 50 + 50 * pokemon.timesAttacked); + }, + /* onEnd(pokemon) { + this.add('-end', pokemon, 'Splashback', '[silent]'); + }, */ + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Flip Turn", target); + }, + category: "Physical", + name: "Splashback", + shortDesc: "Base power increases by 50 every time this Pokemon is hit. Max 300 BP. Reset on switch out.", + pp: 10, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + secondary: undefined, + target: "normal", + type: "Water", + }, + ragingtorrent: { + accuracy: 100, + basePower: 90, + category: "Physical", + name: "Raging Torrent", + shortDesc: "Lowers the target's Atk by 1. Inflicts Encore on the user.", + pp: 20, + priority: 0, + flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, + self: { + volatileStatus: 'encore', + }, + secondary: { + chance: 100, + boosts: { + atk: -1, + }, + }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Breaking Swipe", target); + }, + target: "allAdjacentFoes", + type: "Water", + contestType: "Tough", + }, + familyonslaught: { + accuracy: 100, + basePower: 40, + category: "Physical", + shortDesc: "Hits 2-4 times.", + name: "Family Onslaught", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + multihit: [2, 4], + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Population Bomb", target); + }, + target: "normal", + type: "Normal", + contestType: "Cute", + }, + pestspread: { + accuracy: 100, + basePower: 100, + category: "Physical", + shortDesc: "Changes the target's type to the user's type.", + name: "Pest Spread", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + onAfterHit(target, source) { + if (target.species && (target.species.num === 493 || target.species.num === 773)) return false; + if (target.terastallized) return false; + const oldApparentType = target.apparentType; + let newBaseTypes = source.getTypes(true).filter(type => type !== '???'); + if (!newBaseTypes.length) { + if (source.addedType) { + newBaseTypes = ['Normal']; + } else { + return false; + } + } + this.add('-start', target, 'typechange', '[from] move: Pest Spread', `[of] ${target}`); + target.setType(newBaseTypes); + target.addedType = source.addedType; + target.knownType = source.isAlly(source) && source.knownType; + if (!target.knownType) target.apparentType = oldApparentType; + }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Sludge Bomb", target); + }, + target: "normal", + type: "Poison", + }, + vengefulbone: { + accuracy: 100, + basePower: 80, + category: "Physical", + shortDesc: "Power doubles if an ally fainted last turn.", + name: "Vengeful Bone", + pp: 10, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Shadow Bone", target); + }, + onBasePower(basePower, pokemon) { + if (pokemon.side.faintedLastTurn) { + this.debug('Boosted for a faint last turn'); + return this.chainModify(2); + } + }, + target: "normal", + type: "Ghost", + contestType: "Cool", + }, + escort: { + accuracy: 100, + basePower: 50, + category: "Special", + shortDesc: "User switches out. Switch-in is immune to hazards.", + name: "Escort", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1 }, + selfSwitch: true, + onPrepareHit(target, source, move) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Baton Pass", source); + }, + self: { + sideCondition: 'escort', + }, + condition: { + duration: 1, + }, + target: "normal", + type: "Normal", + contestType: "Clever", + }, + stealthrock: { + inherit: true, + condition: { + // this is a side condition + onSideStart(side) { + this.add('-sidestart', side, 'move: Stealth Rock'); + }, + onSwitchIn(pokemon) { + if (pokemon.hasItem('heavydutyboots') || pokemon.side.getSideCondition('escort')) return; + const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6); + this.damage(pokemon.maxhp * (2 ** typeMod) / 8); + }, + }, + }, + gmaxsteelsurge: { + inherit: true, + condition: { + onSideStart(side) { + this.add('-sidestart', side, 'move: G-Max Steelsurge'); + }, + onSwitchIn(pokemon) { + if (pokemon.hasItem('heavydutyboots') || pokemon.side.getSideCondition('escort')) return; + // Ice Face and Disguise correctly get typed damage from Stealth Rock + // because Stealth Rock bypasses Substitute. + // They don't get typed damage from Steelsurge because Steelsurge doesn't, + // so we're going to test the damage of a Steel-type Stealth Rock instead. + const steelHazard = this.dex.getActiveMove('Stealth Rock'); + steelHazard.type = 'Steel'; + const typeMod = this.clampIntRange(pokemon.runEffectiveness(steelHazard), -6, 6); + this.damage(pokemon.maxhp * (2 ** typeMod) / 8); + }, + }, + }, + spikes: { + inherit: true, + condition: { + // this is a side condition + onSideStart(side) { + this.add('-sidestart', side, 'Spikes'); + this.effectState.layers = 1; + }, + onSideRestart(side) { + if (this.effectState.layers >= 3) return false; + this.add('-sidestart', side, 'Spikes'); + this.effectState.layers++; + }, + onSwitchIn(pokemon) { + if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.side.getSideCondition('escort')) return; + const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 + this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24); + }, + }, + }, + stickyweb: { + inherit: true, + condition: { + onSideStart(side) { + this.add('-sidestart', side, 'move: Sticky Web'); + }, + onSwitchIn(pokemon) { + if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.side.getSideCondition('escort')) return; + this.add('-activate', pokemon, 'move: Sticky Web'); + this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb')); + }, + }, + }, + toxicspikes: { + inherit: true, + condition: { + // this is a side condition + onSideStart(side) { + this.add('-sidestart', side, 'move: Toxic Spikes'); + this.effectState.layers = 1; + }, + onSideRestart(side) { + if (this.effectState.layers >= 2) return false; + this.add('-sidestart', side, 'move: Toxic Spikes'); + this.effectState.layers++; + }, + onSwitchIn(pokemon) { + if (!pokemon.isGrounded()) return; + if (pokemon.hasType('Poison')) { + this.add('-sideend', pokemon.side, 'move: Toxic Spikes', `[of] ${pokemon}`); + pokemon.side.removeSideCondition('toxicspikes'); + } else if (pokemon.hasType('Steel') || pokemon.hasItem('heavydutyboots') || pokemon.side.getSideCondition('escort')) { + // do nothing + } else if (this.effectState.layers >= 2) { + pokemon.trySetStatus('tox', pokemon.side.foe.active[0]); + } else { + pokemon.trySetStatus('psn', pokemon.side.foe.active[0]); + } + }, + }, + }, + /* // leftover placeholder for hidden power because teams.ts was not cooperating previously + terablast: { + num: 851, + accuracy: 100, + basePower: 60, + category: "Special", + name: "Tera Blast", + pp: 15, + priority: 0, + flags: { protect: 1, mirror: 1, metronome: 1, mustpressure: 1 }, + onPrepareHit(target, source, move) { + this.attrLastMove('[anim] Tera Blast ' + source.teraType); + }, + onModifyType(move, pokemon, target) { + move.type = pokemon.teraType; + this.add('-message', `This attack is ${pokemon.teraType}-type!`); + }, + target: "normal", + type: "Normal", + }, */ + magicroom: { + inherit: true, + condition: { + duration: 5, + durationCallback(source, effect) { + if (source?.hasAbility('blackout')) { + this.add('-activate', source, 'ability: blackout', '[move] Magic Room'); + return 0; + } + if (source?.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', '[move] Magic Room'); + return 7; + } + return 5; + }, + onFieldStart(target, source) { + if (source?.hasAbility('persistent')) { + this.add('-fieldstart', 'move: Magic Room', `[of] ${source}`, '[persistent]'); + } else { + this.add('-fieldstart', 'move: Magic Room', `[of] ${source}`); + } + for (const mon of this.getAllActive()) { + this.singleEvent('End', mon.getItem(), mon.itemState, mon); + } + }, + onFieldRestart(target, source) { + this.field.removePseudoWeather('magicroom'); + }, + // Item suppression implemented in Pokemon.ignoringItem() within sim/pokemon.js + onFieldResidualOrder: 27, + onFieldResidualSubOrder: 6, + onFieldEnd() { + this.add('-fieldend', 'move: Magic Room', '[of] ' + this.effectState.source); + }, + }, + }, +}; diff --git a/data/mods/gen9regeneration/pokedex.ts b/data/mods/gen9regeneration/pokedex.ts new file mode 100644 index 0000000000..b6ec63046e --- /dev/null +++ b/data/mods/gen9regeneration/pokedex.ts @@ -0,0 +1,198 @@ +export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = { + // new + alakazam: { + inherit: true, + baseStats: { hp: 80, atk: 50, def: 50, spa: 110, spd: 110, spe: 110 }, + abilities: { 0: "Galaxy Brain", 1: "Inner Focus", H: "Trace" }, + }, + gengar: { + inherit: true, + types: ["Ghost", "Ice"], + baseStats: { hp: 65, atk: 65, def: 65, spa: 100, spd: 90, spe: 115 }, + abilities: { 0: "Blackout" }, + }, + dragonite: { + inherit: true, + baseStats: { hp: 91, atk: 134, def: 95, spa: 95, spd: 84, spe: 101 }, + abilities: { 0: "Lifeguard", H: "Marvel Scale" }, + }, + venusaur: { + inherit: true, + types: ["Grass", "Fairy"], + baseStats: { hp: 80, atk: 66, def: 98, spa: 111, spd: 100, spe: 70 }, + abilities: { 0: "Overgrow", H: "Misty Surge" }, + }, + charizard: { + inherit: true, + types: ["Fire", "Dark"], + baseStats: { hp: 68, atk: 120, def: 89, spa: 60, spd: 87, spe: 109 }, + abilities: { 0: "Blaze", H: "Levitate" }, + }, + blastoise: { + inherit: true, + types: ["Water", "Electric"], + baseStats: { hp: 79, atk: 53, def: 100, spa: 105, spd: 105, spe: 88 }, + abilities: { 0: "Torrent", H: "Motor Drive" }, + }, + beedrill: { + inherit: true, + baseStats: { hp: 65, atk: 100, def: 40, spa: 35, spd: 94, spe: 116 }, + abilities: { 0: "Poison Touch", H: "Speed Boost" }, + }, + pidgeot: { + inherit: true, + types: ["Flying"], + baseStats: { hp: 83, atk: 100, def: 75, spa: 50, spd: 70, spe: 112 }, + abilities: { 0: "Keen Eye", 1: "Tangled Feet", H: "Wings of Victory" }, + }, + onix: { + inherit: true, + evos: [], + baseStats: { hp: 75, atk: 135, def: 140, spa: 30, spd: 75, spe: 70 }, + abilities: { 0: "Sturdy", 1: "Solid Rock", H: "Excavate" }, + }, + wigglytuff: { + inherit: true, + types: ["Fairy", "Dark"], + baseStats: { hp: 140, atk: 75, def: 50, spa: 65, spd: 45, spe: 121 }, + abilities: { 0: "Cute Charm", 1: "Aftermath", H: "Ballooning" }, + }, + dodrio: { + inherit: true, + types: ["Ground", "Fighting"], + baseStats: { hp: 85, atk: 115, def: 60, spa: 55, spd: 55, spe: 115 }, + abilities: { 0: "Sand Rush", 1: "Early Bird", H: "Of A Feather" }, + }, + seadra: { + inherit: true, + evos: [], + types: ["Poison", "Dragon"], + baseStats: { hp: 80, atk: 100, def: 95, spa: 100, spd: 70, spe: 85 }, + abilities: { 0: "Poison Point", 1: "Rain Dish", H: "Merciless" }, + }, + vaporeon: { + inherit: true, + abilities: { 0: "Run Away", 1: "Trace", H: "Protean" }, + }, + flareon: { + inherit: true, + baseStats: { hp: 110, atk: 130, def: 60, spa: 65, spd: 65, spe: 95 }, + abilities: { 0: "Run Away", 1: "Trace", H: "Protean" }, + }, + jolteon: { + inherit: true, + baseStats: { hp: 65, atk: 65, def: 60, spa: 95, spd: 110, spe: 130 }, + abilities: { 0: "Run Away", 1: "Trace", H: "Protean" }, + }, + nidoking: { + inherit: true, + baseStats: { hp: 81, atk: 102, def: 82, spa: 95, spd: 70, spe: 95 }, + abilities: { 0: "Poison Point", 1: "Patriarch", H: "Sheer Force" }, + }, + nidoqueen: { + inherit: true, + baseStats: { hp: 100, atk: 82, def: 87, spa: 95, spd: 85, spe: 76 }, + abilities: { 0: "Poison Point", 1: "Natural Cure", H: "Sheer Force" }, + }, + butterfree: { + inherit: true, + baseStats: { hp: 80, atk: 45, def: 52, spa: 92, spd: 79, spe: 106 }, + abilities: { 0: "Compound Eyes", 1: "Tinted Lens", H: "Multiscale" }, + }, + cloyster: { + inherit: true, + types: ["Water", "Steel"], + baseStats: { hp: 80, atk: 90, def: 165, spa: 80, spd: 70, spe: 50 }, + abilities: { 0: "Shell Armor", 1: "Water Veil", H: "Regenerator" }, + }, + gyarados: { + inherit: true, + baseStats: { hp: 100, atk: 100, def: 107, spa: 70, spd: 92, spe: 71 }, + abilities: { 0: "Violent Abandon" }, + }, + gyaradosmega: { + inherit: true, + baseStats: { hp: 100, atk: 125, def: 107, spa: 105, spd: 122, spe: 81 }, + abilities: { 0: "Violent Abandon" }, + requiredItem: "", + }, + tentacruel: { + inherit: true, + types: ["Dark", "Poison"], + baseStats: { hp: 80, atk: 50, def: 65, spa: 100, spd: 120, spe: 100 }, + abilities: { 0: "Tropical Current" }, + }, + raticate: { + inherit: true, + types: ["Normal", "Poison"], + baseStats: { hp: 75, atk: 90, def: 70, spa: 40, spd: 75, spe: 125 }, + abilities: { 0: "Poison Touch", 1: "Hustle", H: "Guts" }, + }, + kangaskhan: { + inherit: true, + types: ["Normal", "Dragon"], + baseStats: { hp: 115, atk: 110, def: 70, spa: 60, spd: 60, spe: 85 }, + abilities: { 0: "Early Bird", 1: "Bulletproof", H: "Skill Link" }, + }, + farfetchd: { + inherit: true, + types: ["Normal", "Fighting"], + baseStats: { hp: 75, atk: 100, def: 80, spa: 60, spd: 75, spe: 90 }, + abilities: { 0: "Hustle", 1: "Scrappy", H: "Defiant" }, + }, + lapras: { + inherit: true, + types: ["Ice", "Water"], + baseStats: { hp: 130, atk: 85, def: 80, spa: 85, spd: 95, spe: 60 }, + abilities: { 0: "Storm Drain", 1: "Shell Armor", H: "Hydration" }, + }, + tauros: { + inherit: true, + types: ["Normal", "Ground"], + baseStats: { hp: 85, atk: 110, def: 105, spa: 30, spd: 70, spe: 110 }, + abilities: { 0: "Intimidate", 1: "Bull Spirit", H: "Sheer Force" }, + }, + marowak: { + inherit: true, + types: ["Ground", "Ghost"], + baseStats: { hp: 80, atk: 80, def: 105, spa: 50, spd: 95, spe: 100 }, + abilities: { 0: "Battle Armor", 1: "Sand Force", H: "Justified" }, + }, + // Minor Changes (mostly to prevent unevolved Pokemons in gen 1 to hold Eviolite) + golbat: { + inherit: true, + evos: [], + }, + magneton: { + inherit: true, + evos: [], + }, + lickitung: { + inherit: true, + evos: [], + }, + rhydon: { + inherit: true, + evos: [], + }, + chansey: { + inherit: true, + evos: [], + }, + tangela: { + inherit: true, + evos: [], + }, + electabuzz: { + inherit: true, + evos: [], + }, + magmar: { + inherit: true, + evos: [], + }, + porygon: { + inherit: true, + evos: [], + }, +}; diff --git a/data/mods/gen9regeneration/scripts.ts b/data/mods/gen9regeneration/scripts.ts new file mode 100644 index 0000000000..d3c1d6f7dc --- /dev/null +++ b/data/mods/gen9regeneration/scripts.ts @@ -0,0 +1,333 @@ +export const Scripts: ModdedBattleScriptsData = { + gen: 9, + actions: { + modifyDamage( + baseDamage: number, pokemon: Pokemon, target: Pokemon, move: ActiveMove, suppressMessages = false + ) { + const tr = this.battle.trunc; + if (!move.type) move.type = '???'; + const type = move.type; + + baseDamage += 2; + + if (move.spreadHit) { + // multi-target modifier (doubles only) + const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75; + this.battle.debug(`Spread modifier: ${spreadModifier}`); + baseDamage = this.battle.modify(baseDamage, spreadModifier); + } else if (move.multihitType === 'parentalbond' && move.hit > 1) { + // Parental Bond modifier + const bondModifier = this.battle.gen > 6 ? 0.25 : 0.5; + this.battle.debug(`Parental Bond modifier: ${bondModifier}`); + baseDamage = this.battle.modify(baseDamage, bondModifier); + } + + // weather modifier + baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage); + + // crit - not a modifier + const isCrit = target.getMoveHitData(move).crit; + if (isCrit) { + baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2))); + } + + // random factor - also not a modifier + baseDamage = this.battle.randomizer(baseDamage); + + // STAB + // The "???" type never gets STAB + // Not even if you Roost in Gen 4 and somehow manage to use + // Struggle in the same turn. + // (On second thought, it might be easier to get a MissingNo.) + if (type !== '???') { + let stab: number | [number, number] = 1; + + const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type); + if (isSTAB) { + stab = 1.5; + } + + // The Stellar tera type makes this incredibly confusing + // If the move's type does not match one of the user's base types, + // the Stellar tera type applies a one-time 1.2x damage boost for that type. + // + // If the move's type does match one of the user's base types, + // then the Stellar tera type applies a one-time 2x STAB boost for that type, + // and then goes back to using the regular 1.5x STAB boost for those types. + if (pokemon.terastallized === 'Stellar') { + if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) { + stab = isSTAB ? 2 : [4915, 4096]; + move.stellarBoosted = true; + if (pokemon.species.name !== 'Terapagos-Stellar') { + pokemon.stellarBoostedTypes.push(type); + } + } + } else { + if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) { + stab = 2; + } + stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab); + } + + baseDamage = this.battle.modify(baseDamage, stab); + } + + // types + let typeMod = target.runEffectiveness(move); + typeMod = this.battle.clampIntRange(typeMod, -6, 6); + target.getMoveHitData(move).typeMod = typeMod; + if (typeMod > 0) { + if (!suppressMessages) this.battle.add('-supereffective', target); + + for (let i = 0; i < typeMod; i++) { + baseDamage *= 2; + } + } + if (typeMod < 0) { + if (!suppressMessages) this.battle.add('-resisted', target); + + for (let i = 0; i > typeMod; i--) { + baseDamage = tr(baseDamage / 2); + } + } + + if (isCrit && !suppressMessages) this.battle.add('-crit', target); + + if ( + pokemon.status === 'brn' && move.category === 'Physical' && + !pokemon.hasAbility('guts') && !pokemon.hasAbility('tropicalcurrent') + ) { + if (this.battle.gen < 6 || move.id !== 'facade') { + baseDamage = this.battle.modify(baseDamage, 0.5); + } + } + + // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers + if (this.battle.gen === 5 && !baseDamage) baseDamage = 1; + + // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb. + baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage); + + const bypassProtect = target.getMoveHitData(move).bypassProtect; + if (bypassProtect) { + baseDamage = this.battle.modify(baseDamage, 0.25); + if (bypassProtect !== true && bypassProtect.effectType === 'Ability') { + this.battle.add('-ability', pokemon, bypassProtect.name); + } + this.battle.add('-zbroken', target); + } + + // Generation 6-7 moves the check for minimum 1 damage after the final modifier... + if (this.battle.gen !== 5 && !baseDamage) return 1; + + // ...but 16-bit truncation happens even later, and can truncate to 0 + return tr(baseDamage, 16); + }, + }, + init() { + this.modData("Learnsets", "alakazam").learnset.brainwave = ["9L1"]; + this.modData("Learnsets", "gengar").learnset.avalanche = ["9L1"]; + this.modData("Learnsets", "gengar").learnset.blizzard = ["9L1"]; + this.modData("Learnsets", "gengar").learnset.focusenergy = ["9L1"]; + this.modData("Learnsets", "gengar").learnset.frostbreath = ["9L1"]; + this.modData("Learnsets", "gengar").learnset.icebeam = ["9L1"]; + this.modData("Learnsets", "gengar").learnset.iceshard = ["9L1"]; + this.modData("Learnsets", "gengar").learnset.powdersnow = ["9L1"]; + this.modData("Learnsets", "gengar").learnset.snowscape = ["9L1"]; + this.modData("Learnsets", "gengar").learnset.illwind = ["9L1"]; + this.modData("Learnsets", "dragonite").learnset.barrier = ["9L1"]; + this.modData("Learnsets", "dragonite").learnset.guardiandive = ["9L1"]; + this.modData("Learnsets", "dragonite").learnset.uturn = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.aromaticmist = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.calmmind = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.dazzlinggleam = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.drainingkiss = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.fairywind = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.floralhealing = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.flowershield = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.healpulse = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.playrough = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.psychic = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.vitalenergy = ["9L1"]; + this.modData("Learnsets", "venusaur").learnset.zenheadbutt = ["9L1"]; + this.modData("Learnsets", "charizard").learnset.ceaselessedge = ["9L1"]; + this.modData("Learnsets", "charizard").learnset.throatchop = ["9L1"]; + this.modData("Learnsets", "charizard").learnset.smokytorment = ["9L1"]; + this.modData("Learnsets", "charizard").learnset.suckerpunch = ["9L1"]; + this.modData("Learnsets", "blastoise").learnset.chargebeam = ["9L1"]; + this.modData("Learnsets", "blastoise").learnset.charge = ["9L1"]; + this.modData("Learnsets", "blastoise").learnset.iondeluge = ["9L1"]; + this.modData("Learnsets", "blastoise").learnset.powerwash = ["9L1"]; + this.modData("Learnsets", "blastoise").learnset.thunder = ["9L1"]; + this.modData("Learnsets", "blastoise").learnset.thunderwave = ["9L1"]; + this.modData("Learnsets", "blastoise").learnset.thunderbolt = ["9L1"]; + this.modData("Learnsets", "blastoise").learnset.thundershock = ["9L1"]; + this.modData("Learnsets", "blastoise").learnset.voltswitch = ["9L1"]; + this.modData("Learnsets", "blastoise").learnset.zapcannon = ["9L1"]; + this.modData("Learnsets", "beedrill").learnset.closecombat = ["9L1"]; + this.modData("Learnsets", "beedrill").learnset.flail = ["9L1"]; + this.modData("Learnsets", "beedrill").learnset.reversal = ["9L1"]; + this.modData("Learnsets", "beedrill").learnset.spikes = ["9L1"]; + this.modData("Learnsets", "beedrill").learnset.stickyweb = ["9L1"]; + this.modData("Learnsets", "beedrill").learnset.taunt = ["9L1"]; + this.modData("Learnsets", "beedrill").learnset.terablast = ["9L1"]; + this.modData("Learnsets", "pidgeot").learnset.acrobatics = ["9L1"]; + this.modData("Learnsets", "pidgeot").learnset.closecombat = ["9L1"]; + this.modData("Learnsets", "wigglytuff").learnset.crunch = ["9L1"]; + this.modData("Learnsets", "wigglytuff").learnset.darkpulse = ["9L1"]; + this.modData("Learnsets", "wigglytuff").learnset.rapidspin = ["9L1"]; + this.modData("Learnsets", "wigglytuff").learnset.taunt = ["9L1"]; + this.modData("Learnsets", "wigglytuff").learnset.uturn = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.brickbreak = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.bulldoze = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.dig = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.drillrun = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.earthquake = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.highjumpkick = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.lowkick = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.quickguard = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.rototiller = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.sandattack = ["9L1"]; + this.modData("Learnsets", "dodrio").learnset.triplekick = ["9L1"]; + this.modData("Learnsets", "seadra").learnset.acidspray = ["9L1"]; + this.modData("Learnsets", "seadra").learnset.coralcrash = ["9L1"]; + this.modData("Learnsets", "seadra").learnset.dracometeor = ["9L1"]; + this.modData("Learnsets", "seadra").learnset.sludgebomb = ["9L1"]; + this.modData("Learnsets", "seadra").learnset.sludgewave = ["9L1"]; + this.modData("Learnsets", "seadra").learnset.thunder = ["9L1"]; + this.modData("Learnsets", "seadra").learnset.thunderbolt = ["9L1"]; + this.modData("Learnsets", "seadra").learnset.toxicspikes = ["9L1"]; + this.modData("Learnsets", "vaporeon").learnset.slipaway = ["9L1"]; + this.modData("Learnsets", "flareon").learnset.crunch = ["9L1"]; + this.modData("Learnsets", "flareon").learnset.flareout = ["9L1"]; + this.modData("Learnsets", "flareon").learnset.playrough = ["9L1"]; + this.modData("Learnsets", "flareon").learnset.psychicfangs = ["9L1"]; + this.modData("Learnsets", "flareon").learnset.suckerpunch = ["9L1"]; + this.modData("Learnsets", "jolteon").learnset.buzzoff = ["9L1"]; + this.modData("Learnsets", "nidoking").learnset.barbbarrage = ["9L1"]; + this.modData("Learnsets", "nidoqueen").learnset.moonlight = ["9L1"]; + this.modData("Learnsets", "butterfree").learnset.strengthsap = ["9L1"]; + this.modData("Learnsets", "butterfree").learnset.powdergale = ["9L1"]; + delete this.modData('Learnsets', 'alakazam').learnset.focusblast; + delete this.modData('Learnsets', 'alakazam').learnset.nastyplot; + delete this.modData('Learnsets', 'gengar').learnset.focusblast; + delete this.modData('Learnsets', 'gengar').learnset.nastyplot; + delete this.modData('Learnsets', 'gengar').learnset.terablast; + delete this.modData('Learnsets', 'gengar').learnset.thunderbolt; + delete this.modData('Learnsets', 'gengar').learnset.thunder; + delete this.modData('Learnsets', 'dragonite').learnset.dragonclaw; + delete this.modData('Learnsets', 'dragonite').learnset.dragondance; + delete this.modData('Learnsets', 'dragonite').learnset.dragonrush; + delete this.modData('Learnsets', 'dragonite').learnset.dualwingbeat; + delete this.modData('Learnsets', 'dragonite').learnset.honeclaws; + delete this.modData('Learnsets', 'dragonite').learnset.outrage; + delete this.modData('Learnsets', 'dragonite').learnset.poweruppunch; + delete this.modData('Learnsets', 'dragonite').learnset.terablast; + delete this.modData('Learnsets', 'venusaur').learnset.earthpower; + delete this.modData('Learnsets', 'venusaur').learnset.weatherball; + delete this.modData('Learnsets', 'blastoise').learnset.aurasphere; + delete this.modData('Learnsets', 'blastoise').learnset.avalanche; + delete this.modData('Learnsets', 'blastoise').learnset.blizzard; + delete this.modData('Learnsets', 'blastoise').learnset.focusblast; + delete this.modData('Learnsets', 'blastoise').learnset.hail; + delete this.modData('Learnsets', 'blastoise').learnset.icebeam; + delete this.modData('Learnsets', 'blastoise').learnset.icepunch; + delete this.modData('Learnsets', 'blastoise').learnset.icywind; + delete this.modData('Learnsets', 'blastoise').learnset.mist; + delete this.modData('Learnsets', 'blastoise').learnset.shellsmash; + delete this.modData('Learnsets', 'pidgeot').learnset.toxic; + delete this.modData('Learnsets', 'dodrio').learnset.fly; + delete this.modData('Learnsets', 'seadra').learnset.blizzard; + delete this.modData('Learnsets', 'seadra').learnset.icebeam; + // Removing the prevos' moves + delete this.modData('Learnsets', 'gastly').learnset.nastyplot; + delete this.modData('Learnsets', 'gastly').learnset.terablast; + delete this.modData('Learnsets', 'gastly').learnset.thunderbolt; + delete this.modData('Learnsets', 'gastly').learnset.thunder; + delete this.modData('Learnsets', 'haunter').learnset.focusblast; + delete this.modData('Learnsets', 'haunter').learnset.nastyplot; + delete this.modData('Learnsets', 'haunter').learnset.terablast; + delete this.modData('Learnsets', 'haunter').learnset.thunderbolt; + delete this.modData('Learnsets', 'haunter').learnset.thunder; + delete this.modData('Learnsets', 'dratini').learnset.dragondance; + delete this.modData('Learnsets', 'dratini').learnset.dragonrush; + delete this.modData('Learnsets', 'dratini').learnset.outrage; + delete this.modData('Learnsets', 'dratini').learnset.terablast; + delete this.modData('Learnsets', 'dragonair').learnset.dragondance; + delete this.modData('Learnsets', 'dragonair').learnset.dragonrush; + delete this.modData('Learnsets', 'dragonair').learnset.outrage; + delete this.modData('Learnsets', 'dragonair').learnset.terablast; + delete this.modData('Learnsets', 'bulbasaur').learnset.weatherball; + delete this.modData('Learnsets', 'ivysaur').learnset.weatherball; + delete this.modData('Learnsets', 'squirtle').learnset.aurasphere; + delete this.modData('Learnsets', 'squirtle').learnset.blizzard; + delete this.modData('Learnsets', 'squirtle').learnset.hail; + delete this.modData('Learnsets', 'squirtle').learnset.icebeam; + delete this.modData('Learnsets', 'squirtle').learnset.icepunch; + delete this.modData('Learnsets', 'squirtle').learnset.mist; + delete this.modData('Learnsets', 'squirtle').learnset.shellsmash; + delete this.modData('Learnsets', 'wartortle').learnset.aurasphere; + delete this.modData('Learnsets', 'wartortle').learnset.blizzard; + delete this.modData('Learnsets', 'wartortle').learnset.hail; + delete this.modData('Learnsets', 'wartortle').learnset.icebeam; + delete this.modData('Learnsets', 'wartortle').learnset.icepunch; + delete this.modData('Learnsets', 'wartortle').learnset.mist; + delete this.modData('Learnsets', 'wartortle').learnset.shellsmash; + delete this.modData('Learnsets', 'pidgey').learnset.toxic; + delete this.modData('Learnsets', 'pidgeotto').learnset.toxic; + delete this.modData('Learnsets', 'doduo').learnset.fly; + delete this.modData('Learnsets', 'horsea').learnset.blizzard; + delete this.modData('Learnsets', 'horsea').learnset.icebeam; + this.modData("Learnsets", "raticate").learnset.gunkshot = ["9L1"]; + this.modData("Learnsets", "raticate").learnset.poisonjab = ["9L1"]; + this.modData("Learnsets", "raticate").learnset.sludgebomb = ["9L1"]; + this.modData("Learnsets", "raticate").learnset.sludgewave = ["9L1"]; + this.modData("Learnsets", "raticate").learnset.sludge = ["9L1"]; + this.modData("Learnsets", "raticate").learnset.closecombat = ["9L1"]; + this.modData("Learnsets", "raticate").learnset.pestspread = ["9L1"]; + delete this.modData('Learnsets', 'raticate').learnset.swordsdance; + delete this.modData('Learnsets', 'raticate').learnset.stompingtantrum; + delete this.modData('Learnsets', 'raticate').learnset.suckerpunch; + delete this.modData('Learnsets', 'raticate').learnset.pursuit; + delete this.modData('Learnsets', 'raticate').learnset.zenheadbutt; + delete this.modData('Learnsets', 'rattata').learnset.swordsdance; + delete this.modData('Learnsets', 'rattata').learnset.stompingtantrum; + delete this.modData('Learnsets', 'rattata').learnset.suckerpunch; + delete this.modData('Learnsets', 'rattata').learnset.pursuit; + delete this.modData('Learnsets', 'rattata').learnset.zenheadbutt; + this.modData("Learnsets", "kangaskhan").learnset.familyonslaught = ["9L1"]; + this.modData("Learnsets", "kangaskhan").learnset.dragontail = ["9L1"]; + this.modData("Learnsets", "kangaskhan").learnset.dragonclaw = ["9L1"]; + this.modData("Learnsets", "kangaskhan").learnset.dracometeor = ["9L1"]; + this.modData("Learnsets", "kangaskhan").learnset.dragondance = ["9L1"]; + this.modData("Learnsets", "kangaskhan").learnset.uturn = ["9L1"]; + this.modData("Learnsets", "farfetchd").learnset.bulkup = ["9L1"]; + this.modData("Learnsets", "farfetchd").learnset.sacredsword = ["9L1"]; + delete this.modData('Learnsets', 'farfetchd').learnset.toxic; + this.modData("Learnsets", "lapras").learnset.escort = ["9L1"]; + this.modData("Learnsets", "lapras").learnset.wish = ["9L1"]; + this.modData("Learnsets", "tauros").learnset.escort = ["9L1"]; + this.modData("Learnsets", "tauros").learnset.headlongrush = ["9L1"]; + this.modData("Learnsets", "marowak").learnset.knockoff = ["9L1"]; + this.modData("Learnsets", "marowak").learnset.vengefulbone = ["9L1"]; + this.modData("Learnsets", "marowak").learnset.closecombat = ["9L1"]; + this.modData("Learnsets", "gyarados").learnset.acrobatics = ["9L1"]; + this.modData("Learnsets", "gyarados").learnset.ragingtorrent = ["9L1"]; + this.modData("Learnsets", "cloyster").learnset.bulletpunch = ["9L1"]; + this.modData("Learnsets", "cloyster").learnset.curse = ["9L1"]; + this.modData("Learnsets", "cloyster").learnset.explosion = ["9L1"]; + this.modData("Learnsets", "cloyster").learnset.ironhead = ["9L1"]; + this.modData("Learnsets", "cloyster").learnset.splashback = ["9L1"]; + this.modData("Learnsets", "tentacruel").learnset.darkpulse = ["9L1"]; + this.modData("Learnsets", "tentacruel").learnset.foulplay = ["9L1"]; + this.modData("Learnsets", "tentacruel").learnset.nastyplot = ["9L1"]; + delete this.modData('Learnsets', 'cloyster').learnset.iceshard; + delete this.modData('Learnsets', 'cloyster').learnset.lifedew; + delete this.modData('Learnsets', 'cloyster').learnset.shellsmash; + delete this.modData('Learnsets', 'tentacruel').learnset.scald; + delete this.modData('Learnsets', 'shellder').learnset.iceshard; + delete this.modData('Learnsets', 'shellder').learnset.lifedew; + delete this.modData('Learnsets', 'shellder').learnset.shellsmash; + delete this.modData('Learnsets', 'tentacool').learnset.scald; + }, +}; diff --git a/data/mods/gen9ssb/abilities.ts b/data/mods/gen9ssb/abilities.ts index 5776045a74..10afe20079 100644 --- a/data/mods/gen9ssb/abilities.ts +++ b/data/mods/gen9ssb/abilities.ts @@ -942,11 +942,12 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa this.boost({ spe: 1 }); this.heal(pokemon.maxhp); const move = this.dex.moves.get('finalgambit'); + const pp = this.calculatePP(move); const finalGambit = { move: move.name, id: move.id, - pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, - maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, + pp, + maxpp: pp, target: move.target, disabled: false, used: false, diff --git a/data/mods/gen9ssb/conditions.ts b/data/mods/gen9ssb/conditions.ts index a5984188f1..dd7eb99318 100644 --- a/data/mods/gen9ssb/conditions.ts +++ b/data/mods/gen9ssb/conditions.ts @@ -18,11 +18,12 @@ export const Conditions: { [id: IDEntry]: ModdedConditionData & { innateName?: s const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead'); if (ironHeadIndex >= 0) { const move = this.dex.moves.get('behemothblade'); + const pp = this.calculatePP(move, pokemon.ppUps[ironHeadIndex]); pokemon.baseMoveSlots[ironHeadIndex] = { move: move.name, id: move.id, - pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, - maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, + pp, + maxpp: pp, target: move.target, disabled: false, disabledSource: '', @@ -47,11 +48,12 @@ export const Conditions: { [id: IDEntry]: ModdedConditionData & { innateName?: s const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead'); if (ironHeadIndex >= 0) { const move = this.dex.moves.get('behemothbash'); + const pp = this.calculatePP(move, pokemon.ppUps[ironHeadIndex]); pokemon.baseMoveSlots[ironHeadIndex] = { move: move.name, id: move.id, - pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, - maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, + pp, + maxpp: pp, target: move.target, disabled: false, disabledSource: '', diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts index 1e281fd515..a09ac2d8e4 100644 --- a/data/mods/gen9ssb/moves.ts +++ b/data/mods/gen9ssb/moves.ts @@ -1060,11 +1060,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect']) { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target)) return; if (move.smartTarget) { move.smartTarget = false; } else { @@ -1174,11 +1170,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect']) { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target)) return; if (move.smartTarget) { move.smartTarget = false; } else { @@ -3136,14 +3128,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { flags: {}, volatileStatus: 'curse', onHit(target, source) { - const result = this.random(3); - if (result === 0) { - target.trySetStatus('psn', target); - } else if (result === 1) { - target.trySetStatus('par', target); - } else { - target.trySetStatus('brn', target); - } + const status = this.sample(['psn', 'par', 'brn']); + target.trySetStatus(status, source); this.boost({ spe: 1 }, source); }, onPrepareHit(target, source) { @@ -3455,7 +3441,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { attacker.addVolatile('twoturnmove', defender); return null; }, - hasSheerForce: true, + hasSheerForceBoost: true, onPrepareHit(target, source) { this.attrLastMove('[still]'); this.add('-anim', source, 'Lunar Dance', target); @@ -3726,14 +3712,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { if (randomStat2 && randomStat === randomStat2) boost[randomStat] = 4; else if (randomStat2) boost[randomStat2] = 2; this.boost(boost, source); - const result = this.random(3); - if (result === 0) { - this.actions.useMove("laserfocus", target); - } else if (result === 1) { - this.actions.useMove("lockon", target); - } else { - this.actions.useMove("charge", target); - } // This is easier than implementing each condition manually + // This is easier than implementing each condition manually + const move = this.sample(['lockon', 'laserfocus', 'charge']); + this.actions.useMove(move, target); this.heal(target.maxhp / 4, target, target, this.effect); }, target: "self", @@ -4013,12 +3994,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect']) { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } - if (move && (move.target === 'self' || move.category === 'Status')) return; + if (move.target === 'self') return; + if (this.checkMoveBypassesProtect(move, source, target, false)) return; this.add('-activate', target, 'move: Alting', move.name); const lockedmove = source.getVolatile('lockedmove'); if (lockedmove) { @@ -6604,7 +6581,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { if (!target.isGrounded()) { const baseMove = this.dex.moves.get(effect.id); if (baseMove.priority > 0) { - this.hint("Psychic Terrain doesn't affect Pokémon immune to Ground."); + this.hint("Psychic Terrain doesn't affect airborne Pokémon."); } return; } diff --git a/data/mods/gen9ssb/scripts.ts b/data/mods/gen9ssb/scripts.ts index 4113928614..b146c1d0f3 100644 --- a/data/mods/gen9ssb/scripts.ts +++ b/data/mods/gen9ssb/scripts.ts @@ -142,11 +142,12 @@ export function changeMoves(context: Battle, pokemon: Pokemon, newMoves: (string const moveName = Array.isArray(newMove) ? newMove[context.random(newMove.length)] : newMove; const move = context.dex.moves.get(context.toID(moveName)); if (!move.id) continue; + const pp = context.calculatePP(move); const moveSlot = { move: move.name, id: move.id, - pp: Math.floor((move.noPPBoosts ? move.pp : move.pp * 8 / 5) * carryOver[slot]), - maxpp: (move.noPPBoosts ? move.pp : move.pp * 8 / 5), + pp: pp * carryOver[slot], + maxpp: pp, target: move.target, disabled: false, disabledSource: '', @@ -771,8 +772,12 @@ export const Scripts: ModdedBattleScriptsData = { // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb. baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage); - if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) { + const bypassProtect = target.getMoveHitData(move).bypassProtect; + if (bypassProtect) { baseDamage = this.battle.modify(baseDamage, 0.25); + if (bypassProtect !== true && bypassProtect.effectType === 'Ability') { + this.battle.add('-ability', pokemon, bypassProtect.name); + } this.battle.add('-zbroken', target); } diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts index 30770f2651..2963bcb0ae 100644 --- a/data/mods/linked/scripts.ts +++ b/data/mods/linked/scripts.ts @@ -123,13 +123,16 @@ export const Scripts: ModdedBattleScriptsData = { // @ts-expect-error modded const linkedMoves: ActiveMove[] = action.linked; for (let i = linkedMoves.length - 1; i >= 0; i--) { - const isValidTarget = this.validTargetLoc(action.targetLoc, action.pokemon, linkedMoves[i].target); - const randomTarget = this.getRandomTarget(action.pokemon, linkedMoves[i]); - const targetLoc = isValidTarget || !randomTarget ? action.targetLoc : action.pokemon.getLocOf(randomTarget); + // @ts-expect-error modded + const targetLoc = this.resolveTargetLoc(action.targetLoc, action, linkedMoves[i]); const pseudoAction: Action = { choice: 'move', priority: action.priority, speed: action.speed, pokemon: action.pokemon, targetLoc, moveid: linkedMoves[i].id, move: linkedMoves[i], mega: action.mega, - order: action.order, fractionalPriority: action.fractionalPriority, originalTarget: action.originalTarget, + order: action.order, fractionalPriority: action.fractionalPriority, + // @ts-expect-error modded + originalTarget: action.linkedTargets[i], + // @ts-expect-error modded + sorted: i === 1, }; this.queue.unshift(pseudoAction); } @@ -348,7 +351,8 @@ export const Scripts: ModdedBattleScriptsData = { const nextAction = this.queue.peek(); if (this.gen >= 8 && - (nextAction?.choice === 'move' || nextAction?.choice === 'runDynamax') && nextAction?.pokemon !== action.pokemon) { + // @ts-expect-error modded + (nextAction?.choice === 'move' || nextAction?.choice === 'runDynamax') && !nextAction?.sorted) { // In gen 8, speed is updated dynamically so update the queue's speed properties and sort it. this.updateSpeed(); for (const queueAction of this.queue.list) { @@ -359,50 +363,12 @@ export const Scripts: ModdedBattleScriptsData = { return false; }, - getTarget(pokemon, move, targetLoc, originalTarget) { - move = this.dex.moves.get(move); - - // Delete tracksTarget stuff because it's useless in Linked anyway - - // banning Dragon Darts from directly targeting itself is done in side.ts, but - // Dragon Darts can target itself if Ally Switch is used afterwards - if (move.smartTarget) { - const curTarget = pokemon.getAtLoc(targetLoc); - return curTarget && !curTarget.fainted ? curTarget : this.getRandomTarget(pokemon, move); - } - - // Fails if the target is the user and the move can't target its own position - const selfLoc = pokemon.getLocOf(pokemon); - if ( - ['adjacentAlly', 'any', 'normal'].includes(move.target) && targetLoc === selfLoc && - !pokemon.volatiles['twoturnmove'] && !pokemon.volatiles['iceball'] && !pokemon.volatiles['rollout'] - ) { - return move.flags['futuremove'] ? pokemon : null; - } - if (move.target !== 'randomNormal' && this.validTargetLoc(targetLoc, pokemon, move.target)) { - const target = pokemon.getAtLoc(targetLoc); - if (target?.fainted) { - if (this.gameType === 'freeforall') { - // Target is a fainted opponent in a free-for-all battle; attack shouldn't retarget - return target; - } - if (target.isAlly(pokemon)) { - if (move.target === 'adjacentAllyOrSelf' && this.gen !== 5) { - return pokemon; - } - // Target is a fainted ally: attack shouldn't retarget - return target; - } - } - if (target && !target.fainted) { - // Target is unfainted: use selected target location - return target; - } - - // Chosen target not valid, - // retarget randomly with getRandomTarget - } - return this.getRandomTarget(pokemon, move); + resolveTargetLoc(targetLoc: number, action: Action, move: ActiveMove) { + const isValidTarget = this.validTargetLoc(targetLoc, action.pokemon!, move.target); + if (isValidTarget) return targetLoc; + const randomTarget = this.getRandomTarget(action.pokemon!, move); + if (!randomTarget) return targetLoc; + return action.pokemon!.getLocOf(randomTarget); }, actions: { runMove(moveOrMoveName, pokemon, targetLoc, options) { @@ -642,13 +608,20 @@ export const Scripts: ModdedBattleScriptsData = { const decisionMove = this.battle.toID(action.move); if (linkedMoves.some(x => x.id === decisionMove)) { action.linked = linkedMoves; - const linkedOtherMove = action.linked[1 - linkedMoves.findIndex(x => x.id === decisionMove)]; + action.linkedTargets = []; + for (const move of linkedMoves) { + // @ts-expect-error modded + const targetLoc = this.battle.resolveTargetLoc(action.targetLoc, action, move); + action.linkedTargets.push(action.pokemon.getAtLoc(targetLoc)); + } + const linkedOtherIndex = 1 - linkedMoves.findIndex(x => x.id === decisionMove); + const linkedOtherMove = action.linked[linkedOtherIndex]; if (linkedOtherMove.beforeTurnCallback) { this.addChoice({ choice: 'beforeTurnMove', pokemon: action.pokemon, move: linkedOtherMove, - targetLoc: action.targetLoc, + targetLoc: action.linkedTargets[linkedOtherIndex], }); } if (linkedOtherMove.priorityChargeCallback) { @@ -656,7 +629,7 @@ export const Scripts: ModdedBattleScriptsData = { choice: 'priorityChargeMove', pokemon: action.pokemon, move: linkedOtherMove, - targetLoc: action.targetLoc, + targetLoc: action.linkedTargets[linkedOtherIndex], }); } } diff --git a/data/mods/mixandmega/scripts.ts b/data/mods/mixandmega/scripts.ts index 087f070a0f..8c59398f4e 100644 --- a/data/mods/mixandmega/scripts.ts +++ b/data/mods/mixandmega/scripts.ts @@ -3,6 +3,8 @@ export const Scripts: ModdedBattleScriptsData = { init() { this.modData('Abilities', 'dragonize').isNonstandard = null; this.modData('Abilities', 'megasol').isNonstandard = null; + this.modData('Abilities', 'piercingdrill').isNonstandard = null; + this.modData('Abilities', 'spicyspray').isNonstandard = null; for (const i in this.data.Items) { const item = this.data.Items[i]; if (!item.megaStone && !item.onDrive && !(item.onPlate && !item.zMove) && !item.onMemory) continue; @@ -125,14 +127,15 @@ export const Scripts: ModdedBattleScriptsData = { const behemothMove: { [k: string]: string } = { 'Rusted Sword': 'behemothblade', 'Rusted Shield': 'behemothbash', }; - const ironHead = pokemon.baseMoves.indexOf('ironhead'); - if (ironHead >= 0) { + const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead'); + if (ironHeadIndex >= 0) { const move = this.dex.moves.get(behemothMove[pokemon.getItem().name]); - pokemon.baseMoveSlots[ironHead] = { + const pp = this.calculatePP(move, pokemon.ppUps[ironHeadIndex]); + pokemon.baseMoveSlots[ironHeadIndex] = { move: move.name, id: move.id, - pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, - maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5, + pp, + maxpp: pp, target: move.target, disabled: false, disabledSource: '', diff --git a/data/mods/partnersincrime/scripts.ts b/data/mods/partnersincrime/scripts.ts index 51a35b323d..c6ffe18a44 100644 --- a/data/mods/partnersincrime/scripts.ts +++ b/data/mods/partnersincrime/scripts.ts @@ -407,17 +407,18 @@ export const Scripts: ModdedBattleScriptsData = { this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType); this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower); this.timesAttacked = pokemon.timesAttacked; - for (const moveSlot of pokemon.moveSlots) { + for (const [i, moveSlot] of pokemon.moveSlots.entries()) { let moveName = moveSlot.move; - if (!pokemon.m.curMoves.includes(moveSlot.id)) continue; if (moveSlot.id === 'hiddenpower') { moveName = 'Hidden Power ' + this.hpType; } + const move = this.battle.dex.moves.get(moveSlot.id); + const pp = Math.min(5, move.pp); this.moveSlots.push({ move: moveName, id: moveSlot.id, - pp: moveSlot.maxpp === 1 ? 1 : 5, - maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp, + pp, + maxpp: this.battle.gen >= 5 ? pp : this.battle.calculatePP(move, this.ppUps[i] || 0), target: moveSlot.target, disabled: false, used: false, diff --git a/data/mods/passiveaggressive/moves.ts b/data/mods/passiveaggressive/moves.ts index 78a2f7408a..aaab74a98e 100644 --- a/data/mods/passiveaggressive/moves.ts +++ b/data/mods/passiveaggressive/moves.ts @@ -215,11 +215,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect']) { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target)) return; if (move.smartTarget) { move.smartTarget = false; } else { diff --git a/data/mods/pokebilities/scripts.ts b/data/mods/pokebilities/scripts.ts index 4996715dc0..c535547337 100644 --- a/data/mods/pokebilities/scripts.ts +++ b/data/mods/pokebilities/scripts.ts @@ -70,16 +70,18 @@ export const Scripts: ModdedBattleScriptsData = { this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType); this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower); this.timesAttacked = pokemon.timesAttacked; - for (const moveSlot of pokemon.moveSlots) { + for (const [i, moveSlot] of pokemon.moveSlots.entries()) { let moveName = moveSlot.move; if (moveSlot.id === 'hiddenpower') { moveName = 'Hidden Power ' + this.hpType; } + const move = this.battle.dex.moves.get(moveSlot.id); + const pp = Math.min(5, move.pp); this.moveSlots.push({ move: moveName, id: moveSlot.id, - pp: moveSlot.maxpp === 1 ? 1 : 5, - maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp, + pp, + maxpp: this.battle.gen >= 5 ? pp : this.battle.calculatePP(move, this.ppUps[i] || 0), target: moveSlot.target, disabled: false, used: false, diff --git a/data/mods/teraoverride/moves.ts b/data/mods/teraoverride/moves.ts index 90955d4d5c..5e8175440b 100644 --- a/data/mods/teraoverride/moves.ts +++ b/data/mods/teraoverride/moves.ts @@ -574,7 +574,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { if (!target.isGrounded()) { const baseMove = this.dex.moves.get(effect.id); if (baseMove.priority > 0) { - this.hint("Psychic Terrain doesn't affect Pokémon immune to Ground."); + this.hint("Psychic Terrain doesn't affect airborne Pokémon."); } return; } diff --git a/data/mods/trademarked/scripts.ts b/data/mods/trademarked/scripts.ts index a33c7ff4f0..ea46643879 100644 --- a/data/mods/trademarked/scripts.ts +++ b/data/mods/trademarked/scripts.ts @@ -251,16 +251,18 @@ export const Scripts: ModdedBattleScriptsData = { this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType); this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower); this.timesAttacked = pokemon.timesAttacked; - for (const moveSlot of pokemon.moveSlots) { + for (const [i, moveSlot] of pokemon.moveSlots.entries()) { let moveName = moveSlot.move; if (moveSlot.id === 'hiddenpower') { moveName = 'Hidden Power ' + this.hpType; } + const move = this.battle.dex.moves.get(moveSlot.id); + const pp = Math.min(5, move.pp); this.moveSlots.push({ move: moveName, id: moveSlot.id, - pp: moveSlot.maxpp === 1 ? 1 : 5, - maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp, + pp, + maxpp: this.battle.gen >= 5 ? pp : this.battle.calculatePP(move, this.ppUps[i] || 0), target: moveSlot.target, disabled: false, used: false, diff --git a/data/moves.ts b/data/moves.ts index e4eea5f69c..b769948a68 100644 --- a/data/moves.ts +++ b/data/moves.ts @@ -1006,11 +1006,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect']) { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target)) return; if (move.smartTarget) { move.smartTarget = false; } else { @@ -2042,11 +2038,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect'] || move.category === 'Status') { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target, false)) return; if (move.smartTarget) { move.smartTarget = false; } else { @@ -2232,7 +2224,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { priority: 0, flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 }, onAfterHit(target, source, move) { - if (!move.hasSheerForce && source.hp) { + if (!move.hasSheerForce) { for (const side of source.side.foeSidesWithConditions()) { side.addSideCondition('spikes'); } @@ -3643,14 +3635,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { secondary: { chance: 50, onHit(target, source) { - const result = this.random(3); - if (result === 0) { - target.trySetStatus('psn', source); - } else if (result === 1) { - target.trySetStatus('par', source); - } else { - target.trySetStatus('slp', source); - } + const status = this.sample(['psn', 'par', 'slp']); + target.trySetStatus(status, source); }, }, target: "normal", @@ -4664,7 +4650,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { attacker.addVolatile('twoturnmove', defender); return null; }, - hasSheerForce: true, + hasSheerForceBoost: true, target: "normal", type: "Electric", }, @@ -6733,14 +6719,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { self: { onHit(source) { for (const pokemon of source.foes()) { - const result = this.random(3); - if (result === 0) { - pokemon.trySetStatus('slp', source); - } else if (result === 1) { - pokemon.trySetStatus('par', source); - } else { - pokemon.trySetStatus('psn', source); - } + const status = this.sample(['slp', 'par', 'psn']); + pokemon.trySetStatus(status, source); } }, }, @@ -9439,9 +9419,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { priority: 0, flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, onAfterHit(target, source) { - if (source.hp) { - this.field.clearTerrain(); - } + this.field.clearTerrain(); }, onAfterSubDamage(damage, target, source) { if (source.hp) { @@ -9944,11 +9922,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect'] || move.category === 'Status') { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target, false)) return; if (move.smartTarget) { move.smartTarget = false; } else { @@ -9994,11 +9968,9 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { } }, onAfterHit(target, source) { - if (source.hp) { - const item = target.takeItem(); - if (item) { - this.add('-enditem', target, item.name, '[from] move: Knock Off', `[of] ${source}`); - } + const item = target.takeItem(); + if (item) { + this.add('-enditem', target, item.name, '[from] move: Knock Off', `[of] ${source}`); } }, target: "normal", @@ -11028,12 +11000,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect']) { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } - if (move && (move.target === 'self' || move.category === 'Status')) return; + if (move.target === 'self') return; + if (this.checkMoveBypassesProtect(move, source, target, false)) return; this.add('-activate', target, 'move: Mat Block', move.name); const lockedmove = source.getVolatile('lockedmove'); if (lockedmove) { @@ -12353,16 +12321,16 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, onAfterHit(target, pokemon, move) { if (!move.hasSheerForce) { - if (pokemon.hp && pokemon.removeVolatile('leechseed')) { + if (pokemon.removeVolatile('leechseed')) { this.add('-end', pokemon, 'Leech Seed', '[from] move: Mortal Spin', `[of] ${pokemon}`); } const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; for (const condition of sideConditions) { - if (pokemon.hp && pokemon.side.removeSideCondition(condition)) { + if (pokemon.side.removeSideCondition(condition)) { this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Mortal Spin', `[of] ${pokemon}`); } } - if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { + if (pokemon.volatiles['partiallytrapped']) { pokemon.removeVolatile('partiallytrapped'); } } @@ -12926,11 +12894,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect'] || move.category === 'Status') { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target, false)) return; if (move.smartTarget) { move.smartTarget = false; } else { @@ -13097,7 +13061,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { break; } }, - hasSheerForce: true, + hasSheerForceBoost: true, target: "normal", type: "Dragon", }, @@ -14017,11 +13981,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect']) { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target)) return; if (move.smartTarget) { move.smartTarget = false; } else { @@ -14159,7 +14119,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { if (!target.isGrounded()) { const baseMove = this.dex.moves.get(effect.id); if (baseMove.priority > 0) { - this.hint("Psychic Terrain doesn't affect Pokémon immune to Ground."); + this.hint("Psychic Terrain doesn't affect airborne Pokémon."); } return; } @@ -14551,11 +14511,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { // Quick Guard blocks moves with positive priority, even those given increased priority by Prankster or Gale Wings. // (e.g. it blocks 0 priority moves boosted by Prankster or Gale Wings; Quick Claw/Custap Berry do not count) if (move.priority <= 0.1) return; - if (!move.flags['protect']) { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target)) return; this.add('-activate', target, 'move: Quick Guard'); const lockedmove = source.getVolatile('lockedmove'); if (lockedmove) { @@ -14745,16 +14701,16 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, onAfterHit(target, pokemon, move) { if (!move.hasSheerForce) { - if (pokemon.hp && pokemon.removeVolatile('leechseed')) { + if (pokemon.removeVolatile('leechseed')) { this.add('-end', pokemon, 'Leech Seed', '[from] move: Rapid Spin', `[of] ${pokemon}`); } const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge']; for (const condition of sideConditions) { - if (pokemon.hp && pokemon.side.removeSideCondition(condition)) { + if (pokemon.side.removeSideCondition(condition)) { this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Spin', `[of] ${pokemon}`); } } - if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { + if (pokemon.volatiles['partiallytrapped']) { pokemon.removeVolatile('partiallytrapped'); } } @@ -14987,13 +14943,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { chance: 10, status: 'slp', }, - onHit(target, pokemon, move) { + onAfterMoveSecondarySelf(pokemon) { if (pokemon.baseSpecies.baseSpecies === 'Meloetta' && !pokemon.transformed) { - move.willChangeForme = true; - } - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - if (move.willChangeForme) { const meloettaForme = pokemon.species.id === 'meloettapirouette' ? '' : '-Pirouette'; pokemon.formeChange('Meloetta' + meloettaForme, this.effect, false, '0', '[msg]'); } @@ -16474,10 +16425,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect'] || move.category === 'Status') { - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target, false)) return; if (move.smartTarget) { move.smartTarget = false; } else { @@ -17285,7 +17233,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { return; } this.add('-prepare', attacker, move.name); - if (['sunnyday', 'desolateland'].includes(attacker.effectiveWeather())) { + if (['sunnyday', 'desolateland'].includes(attacker.effectiveWeather(true))) { this.attrLastMove('[still]'); this.addMove('-anim', attacker, move.name, defender); return; @@ -17321,7 +17269,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { return; } this.add('-prepare', attacker, move.name); - if (['sunnyday', 'desolateland'].includes(attacker.effectiveWeather())) { + if (['sunnyday', 'desolateland'].includes(attacker.effectiveWeather(true))) { this.attrLastMove('[still]'); this.addMove('-anim', attacker, move.name, defender); return; @@ -17603,11 +17551,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { }, onTryHitPriority: 3, onTryHit(target, source, move) { - if (!move.flags['protect']) { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target)) return; if (move.smartTarget) { move.smartTarget = false; } else { @@ -18135,7 +18079,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { priority: 0, flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 }, onAfterHit(target, source, move) { - if (!move.hasSheerForce && source.hp) { + if (!move.hasSheerForce) { for (const side of source.side.foeSidesWithConditions()) { side.addSideCondition('stealthrock'); } @@ -18715,7 +18659,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { onHit(target, source, move) { const yourItem = target.takeItem(source); const myItem = source.takeItem(); - if (target.item || source.item || (!yourItem && !myItem)) { + if (yourItem === false || myItem === false || (!yourItem && !myItem)) { if (yourItem) target.item = yourItem.id; if (myItem) source.item = myItem.id; return false; @@ -19915,14 +19859,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { secondary: { chance: 20, onHit(target, source) { - const result = this.random(3); - if (result === 0) { - target.trySetStatus('brn', source); - } else if (result === 1) { - target.trySetStatus('par', source); - } else { - target.trySetStatus('frz', source); - } + const status = this.sample(['brn', 'par', 'frz']); + target.trySetStatus(status, source); }, }, target: "normal", @@ -19944,7 +19882,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { onHit(target, source, move) { const yourItem = target.takeItem(source); const myItem = source.takeItem(); - if (target.item || source.item || (!yourItem && !myItem)) { + if (yourItem === false || myItem === false || (!yourItem && !myItem)) { if (yourItem) target.item = yourItem.id; if (myItem) source.item = myItem.id; return false; @@ -20177,7 +20115,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { isNonstandard: "Past", name: "Trump Card", pp: 5, - noPPBoosts: true, priority: 0, flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, target: "normal", @@ -20900,11 +20837,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { if (move?.target !== 'allAdjacent' && move.target !== 'allAdjacentFoes') { return; } - if (move.isZ || move.isMax) { - if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return; - target.getMoveHitData(move).zBrokeProtect = true; - return; - } + if (this.checkMoveBypassesProtect(move, source, target)) return; this.add('-activate', target, 'move: Wide Guard'); const lockedmove = source.getVolatile('lockedmove'); if (lockedmove) { @@ -21362,13 +21295,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = { chance: 10, status: 'frz', }, - onHit(target, pokemon, move) { + onAfterMoveSecondarySelf(pokemon) { if (pokemon.baseSpecies.baseSpecies === 'Ramnarok' && !pokemon.transformed) { - move.willChangeForme = true; - } - }, - onAfterMoveSecondarySelf(pokemon, target, move) { - if (move.willChangeForme) { const forme = pokemon.species.id === 'ramnarokradiant' ? '' : '-Radiant'; pokemon.formeChange('Ramnarok' + forme, this.effect, false, '0', '[msg]'); } diff --git a/data/pokedex.ts b/data/pokedex.ts index 66b4aa6afc..8ced11d3b9 100644 --- a/data/pokedex.ts +++ b/data/pokedex.ts @@ -1039,7 +1039,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { types: ["Fairy", "Flying"], genderRatio: { M: 0.25, F: 0.75 }, baseStats: { hp: 95, atk: 80, def: 93, spa: 135, spd: 110, spe: 70 }, - abilities: { 0: "Cute Charm", 1: "Magic Guard", H: "Unaware" }, + abilities: { 0: "Magic Bounce" }, heightm: 1.7, weightkg: 42.3, color: "Pink", @@ -1723,7 +1723,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Grass", "Poison"], baseStats: { hp: 80, atk: 125, def: 85, spa: 135, spd: 95, spe: 70 }, - abilities: { 0: "Chlorophyll", H: "Gluttony" }, + abilities: { 0: "Innards Out" }, heightm: 4.5, weightkg: 125.5, color: "Green", @@ -2736,9 +2736,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Water", "Psychic"], gender: "N", - // FIXME: change stats on generation shift - baseStats: { hp: 60, atk: 140, def: 105, spa: 130, spd: 105, spe: 120 }, - abilities: { 0: "Illuminate", 1: "Natural Cure", H: "Analytic" }, + baseStats: { hp: 60, atk: 100, def: 105, spa: 130, spd: 105, spe: 120 }, + abilities: { 0: "Huge Power" }, heightm: 2.3, weightkg: 80, color: "Purple", @@ -3352,7 +3351,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Dragon", "Flying"], baseStats: { hp: 91, atk: 124, def: 115, spa: 145, spd: 125, spe: 100 }, - abilities: { 0: "Inner Focus", H: "Multiscale" }, + abilities: { 0: "Multiscale" }, heightm: 2.2, weightkg: 290, color: "Brown", @@ -4636,7 +4635,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Steel", "Flying"], baseStats: { hp: 65, atk: 140, def: 110, spa: 40, spd: 100, spe: 110 }, - abilities: { 0: "Keen Eye", 1: "Sturdy", H: "Weak Armor" }, + abilities: { 0: "Stalwart" }, heightm: 1.7, weightkg: 40.4, color: "Gray", @@ -8708,7 +8707,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { types: ["Ice", "Ghost"], gender: "F", baseStats: { hp: 70, atk: 80, def: 70, spa: 140, spd: 100, spe: 120 }, - abilities: { 0: "Snow Cloak", H: "Cursed Body" }, + abilities: { 0: "Snow Warning" }, heightm: 2.6, weightkg: 29.6, color: "White", @@ -9913,7 +9912,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Ground", "Steel"], baseStats: { hp: 110, atk: 165, def: 100, spa: 65, spd: 65, spe: 103 }, - abilities: { 0: "Sand Rush", 1: "Sand Force", H: "Mold Breaker" }, + abilities: { 0: "Piercing Drill" }, heightm: 0.9, weightkg: 60, color: "Gray", @@ -11144,7 +11143,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { baseStats: { hp: 85, atk: 145, def: 80, spa: 135, spd: 90, spe: 80 }, abilities: { 0: "Levitate" }, heightm: 3, - weightkg: 160, + weightkg: 180, color: "Blue", eggGroups: ["Amorphous"], requiredItem: "Eelektrossite", @@ -11224,7 +11223,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Ghost", "Fire"], baseStats: { hp: 60, atk: 75, def: 110, spa: 175, spd: 110, spe: 90 }, - abilities: { 0: "Flash Fire", 1: "Flame Body", H: "Infiltrator" }, + abilities: { 0: "Infiltrator" }, heightm: 2.5, weightkg: 69.6, color: "Black", @@ -11433,7 +11432,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { types: ["Ground", "Ghost"], gender: "N", baseStats: { hp: 89, atk: 159, def: 105, spa: 70, spd: 105, spe: 55 }, - abilities: { 0: "Iron Fist", 1: "Klutz", H: "No Guard" }, + abilities: { 0: "Unseen Fist" }, heightm: 4, weightkg: 330, color: "Green", @@ -12573,7 +12572,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { types: ["Fairy"], gender: "F", baseStats: { hp: 74, atk: 85, def: 87, spa: 155, spd: 148, spe: 102 }, - abilities: { 0: "Flower Veil", H: "Symbiosis" }, + abilities: { 0: "Fairy Aura" }, heightm: 0.2, weightkg: 100.8, color: "White", @@ -12729,7 +12728,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { types: ["Psychic"], gender: "M", baseStats: { hp: 74, atk: 48, def: 76, spa: 143, spd: 101, spe: 124 }, - abilities: { 0: "Keen Eye", 1: "Infiltrator", H: "Competitive" }, + abilities: { 0: "Trace" }, heightm: 0.8, weightkg: 10.1, color: "Blue", @@ -12746,7 +12745,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { types: ["Psychic"], gender: "F", baseStats: { hp: 74, atk: 48, def: 76, spa: 143, spd: 101, spe: 124 }, - abilities: { 0: "Keen Eye", 1: "Infiltrator", H: "Competitive" }, + abilities: { 0: "Trace" }, heightm: 0.8, weightkg: 10.1, color: "White", @@ -13134,7 +13133,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Fighting", "Flying"], baseStats: { hp: 78, atk: 137, def: 100, spa: 74, spd: 93, spe: 118 }, - abilities: { 0: "Limber", 1: "Unburden", H: "Mold Breaker" }, + abilities: { 0: "No Guard" }, heightm: 1, weightkg: 25, color: "Green", @@ -13960,7 +13959,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Fighting", "Ice"], baseStats: { hp: 97, atk: 157, def: 122, spa: 62, spd: 107, spe: 33 }, - abilities: { 0: "Hyper Cutter", 1: "Iron Fist", H: "Anger Point" }, + abilities: { 0: "Iron Fist" }, heightm: 2.6, weightkg: 252.8, color: "White", @@ -15075,9 +15074,9 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Normal", "Dragon"], baseStats: { hp: 78, atk: 85, def: 110, spa: 160, spd: 116, spe: 36 }, - abilities: { 0: "Berserk", 1: "Sap Sipper", H: "Cloud Nine" }, + abilities: { 0: "Berserk" }, heightm: 3, - weightkg: 185, + weightkg: 240.5, color: "White", eggGroups: ["Monster", "Dragon"], requiredItem: "Drampanite", @@ -18281,7 +18280,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Grass", "Fire"], baseStats: { hp: 65, atk: 138, def: 85, spa: 138, spd: 85, spe: 75 }, - abilities: { 0: "Chlorophyll", 1: "Insomnia", H: "Moody" }, + abilities: { 0: "Spicy Spray" }, heightm: 1.2, weightkg: 22, color: "Green", @@ -18541,7 +18540,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { forme: "Mega", types: ["Rock", "Poison"], baseStats: { hp: 83, atk: 90, def: 105, spa: 150, spd: 96, spe: 101 }, - abilities: { 0: "Toxic Debris", H: "Corrosion" }, + abilities: { 0: "Adaptability" }, heightm: 2.8, weightkg: 77, color: "Blue", @@ -18682,7 +18681,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 }, abilities: { 0: "Commander", H: "Storm Drain" }, heightm: 0.3, - weightkg: 8, + weightkg: 24, color: "Red", eggGroups: ["Water 2"], requiredItem: "Tatsugirinite", @@ -18697,7 +18696,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 }, abilities: { 0: "Commander", H: "Storm Drain" }, heightm: 0.3, - weightkg: 8, + weightkg: 24, color: "Pink", eggGroups: ["Water 2"], requiredItem: "Tatsugirinite", @@ -18712,7 +18711,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = { baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 }, abilities: { 0: "Commander", H: "Storm Drain" }, heightm: 0.3, - weightkg: 8, + weightkg: 24, color: "Yellow", eggGroups: ["Water 2"], requiredItem: "Tatsugirinite", diff --git a/data/random-battles/ccapm2025/random-sets.json b/data/random-battles/ccapm2025/random-sets.json new file mode 100644 index 0000000000..0323bcb611 --- /dev/null +++ b/data/random-battles/ccapm2025/random-sets.json @@ -0,0 +1,809 @@ +{ + "aegislash": { + "level": 86, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Soulbound Slash", "Shadow Sneak", "King's Shield", "Swords Dance", "Close Combat"], + "abilities": ["Stance Change"] + } + ] + }, + "alcremie": { + "level": 94, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Dazzling Gleam", "Recover", "Calm Mind", "Mystical Fire", "Psyshock"], + "abilities": ["Aroma Veil"] + } + ] + }, + "aurorus": { + "level": 95, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Primal Pulse", "Weather Ball", "Aurora Veil", "Stealth Rock"], + "abilities": ["Snow Warning"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Primal Pulse", "Ice Beam", "Rock Polish", "Dark Pulse"], + "abilities": ["Snow Warning"] + } + ] + }, + "beartic": { + "level": 94, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Glacier Fang", "Close Combat", "Earthquake", "Play Rough"], + "abilities": ["Slush Rush"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Glacier Fang", "Close Combat", "Earthquake", "Snowscape"], + "abilities": ["Slush Rush"] + } + ] + }, + "blaziken": { + "level": 97, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Flame Charge", "Knock Off", "Close Combat", "Fire Punch"], + "abilities": ["Tough Claws"] + }, + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Acrobatics", "Close Combat", "Blaze Kick"], + "abilities": ["Tough Claws"] + } + ] + }, + "clawitzer": { + "level": 94, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Dragon Pulse", "Water Pulse", "Flip Turn", "Dark Pulse"], + "abilities": ["Mega Launcher"] + }, + { + "role": "AV Pivot", + "movepool": ["Dragon Pulse", "Water Pulse", "Flip Turn", "Dark Pulse"], + "abilities": ["Mega Launcher"] + } + ] + }, + "cofagrigus": { + "level": 94, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Curse", "Shadow Ball", "Energy Ball", "Nasty Plot"], + "abilities": ["Mummy"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Curse", "Shadow Ball", "Stealth Rock", "Giga Drain"], + "abilities": ["Mummy"] + } + ] + }, + "crustle": { + "level": 95, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Shell Smash", "Night Slash", "X-Scissor", "Earthquake"], + "abilities": ["Weak Armor"] + } + ] + }, + "darmanitan": { + "level": 89, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Flare Blitz", "Superpower", "U-turn", "Earthquake", "Zen Headbutt"], + "abilities": ["Sheer Force"] + } + ] + }, + "diancie": { + "level": 96, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Diamond Storm", "Stealth Rock", "Moonblast", "Spikes", "Heal Bell", "Body Press"], + "abilities": ["Clear Body"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Diamond Storm", "Draining Kiss", "Stored Power"], + "abilities": ["Clear Body"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Diamond Storm", "Sleep Talk", "Moonblast", "Rest"], + "abilities": ["Clear Body"] + } + ] + }, + "dragapult": { + "level": 95, + "sets": [ + { + "role": "Fast Bulky Setup", + "movepool": ["Phantom Force", "Dragon Darts", "Substitute", "Acrobatics"], + "abilities": ["Infiltrator"] + }, + { + "role": "Fast Attacker", + "movepool": ["Phantom Force", "Dragon Darts", "U-turn", "Sucker Punch"], + "abilities": ["Infiltrator"] + } + ] + }, + "drifblim": { + "level": 97, + "sets": [ + { + "role": "Fast Bulky Setup", + "movepool": ["Infernal Parade", "Air Slash", "Strength Sap", "Stored Power"], + "abilities": ["Aftermath"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Shadow Ball", "Hurricane", "Thunderbolt", "Tailwind"], + "abilities": ["Aftermath"] + } + ] + }, + "dudunsparce": { + "level": 85, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Coil", "sixtongueemojis", "Stone Edge", "Roost"], + "abilities": ["Serene Grace"] + }, + { + "role": "Wallbreaker", + "movepool": ["sixtongueemojis", "Earthquake", "Ice Spinner", "Dual Wingbeat"], + "abilities": ["Serene Grace"] + } + ] + }, + "electrode": { + "level": 99, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Explosion", "Volt Switch", "Gyro Ball", "Double-Edge"], + "abilities": ["Static"] + }, + { + "role": "Bulky Support", + "movepool": ["Lunar Dance", "Volt Switch", "Gyro Ball", "Rapid Spin", "Return"], + "abilities": ["Static"] + } + ] + }, + "emolga": { + "level": 92, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Thunderbolt", "U-turn", "Air Slash", "Energy Ball", "Nuzzle", "Roost"], + "abilities": ["Speed Boost"] + } + ] + }, + "fearow": { + "level": 98, + "sets": [ + { + "role": "Fast Bulky Setup", + "movepool": ["Detect", "Drill Peck", "Curse", "Quick Attack"], + "abilities": ["Sniper"] + }, + { + "role": "Fast Support", + "movepool": ["Tailwind", "Drill Peck", "Defog", "Detect"], + "abilities": ["Sniper"] + } + ] + }, + "flygon": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Draco Meteor", "Earth Power", "Vacuum Wave", "Alluring Voice", "U-turn", "Boomburst"], + "abilities": ["Levitate"] + } + ] + }, + "genesectburn": { + "level": 87, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Techno Blast", "Shift Gear", "Bug Buzz", "Last Resort"], + "abilities": ["Download"] + } + ] + }, + "genesectdouse": { + "level": 87, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Techno Blast", "Iron Defense", "Giga Drain", "Tri Attack"], + "abilities": ["Download"] + } + ] + }, + "genesectshock": { + "level": 87, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Techno Blast", "Fell Stinger", "Return", "Rock Polish"], + "abilities": ["Download"] + } + ] + }, + "genesectchill": { + "level": 87, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Techno Blast", "Extreme Speed", "Bug Buzz", "Flash Cannon"], + "abilities": ["Download"] + } + ] + }, + "gliscor": { + "level": 99, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Facade", "Protect", "High Horsepower", "Knock Off", "Swords Dance", "Crabhammer"], + "abilities": ["Poison Heal"] + } + ] + }, + "ironvaliant": { + "level": 88, + "sets": [ + { + "role": "Fast Bulky Setup", + "movepool": ["Close Combat", "Swords Dance", "Play Rough", "Knock Off"], + "abilities": ["Quark Drive"] + }, + { + "role": "Bulky Support", + "movepool": ["Spirit Break", "Wish", "Will-O-Wisp", "Protect"], + "abilities": ["Quark Drive"] + } + ] + }, + "jirachi": { + "level": 90, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Moonblast", "Psyshock", "Aura Sphere"], + "abilities": ["Serene Grace"] + } + ] + }, + "kecleon": { + "level": 92, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Kaleidostorm", "Knock Off", "Power-Up Punch", "Drain Punch"], + "abilities": ["Color Change"] + } + ] + }, + "kommoo": { + "level": 90, + "sets": [ + { + "role": "Fast Bulky Setup", + "movepool": ["Clangorous Soul", "Protect", "Aura Sphere", "Flash Cannon"], + "abilities": ["Soundproof"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Belly Drum", "Protect", "Drain Punch", "Stone Edge"], + "abilities": ["Soundproof"] + } + ] + }, + "landorustherian": { + "level": 90, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Generational De-Evolution", "Earthquake", "Stone Edge", "Knock Off", "U-turn"], + "abilities": ["Intimidate"] + } + ] + }, + "landorus": { + "level": 90, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Generational De-Evolution", "Earth Power", "Sludge Wave", "Psychic"], + "abilities": ["Sheer Force"] + } + ] + }, + "lilligant": { + "level": 100, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Quiver Dance", "Solar Beam", "Alluring Voice", "Weather Ball"], + "abilities": ["Dancer"] + } + ] + }, + "lucario": { + "level": 91, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Power-Up Punch", "Extreme Speed", "High Jump Kick", "Earthquake"], + "abilities": ["Inner Focus"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Nasty Plot", "Aura Sphere", "Vacuum Wave", "Dark Pulse"], + "abilities": ["Inner Focus"] + } + ] + }, + "luvdisc": { + "level": 97, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Endure", "Flip Turn", "Flail", "Aqua Jet"], + "abilities": ["Trying My Best"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Splash", "Flip Turn", "Return", "Aqua Jet"], + "abilities": ["Trying My Best"] + } + ] + }, + "luxray": { + "level": 93, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Supercell Slam", "Iron Tail", "Volt Switch", "Psychic Fangs", "Play Rough"], + "abilities": ["Overcharged"] + } + ] + }, + "magcargo": { + "level": 97, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Overheat", "Stealth Rock", "Earth Power", "Will-O-Wisp"], + "abilities": ["Molten Core"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Shell Smash", "Flamethrower", "Earth Power", "Power Gem"], + "abilities": ["Molten Core"] + } + ] + }, + "mamoswine": { + "level": 93, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Earthquake", "Icicle Crash", "Body Slam", "Stone Edge"], + "abilities": ["Thick Fat"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Earthquake", "Icicle Crash", "Stealth Rock", "Double-Edge"], + "abilities": ["Thick Fat"] + } + ] + }, + "mesprit": { + "level": 88, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Gaslight", "Protect", "Psychic Noise", "Dazzling Gleam"], + "abilities": ["Levitate"] + }, + { + "role": "Bulky Setup", + "movepool": ["Gaslight", "Calm Mind", "Stored Power", "Dazzling Gleam"], + "abilities": ["Levitate"] + } + ] + }, + "mewtwo": { + "level": 83, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Nasty Plot", "Dark Pulse", "Aura Sphere", "Psystrike"], + "abilities": ["Unnerve"] + }, + { + "role": "Fast Support", + "movepool": ["Will-O-Wisp", "Dark Pulse", "Taunt", "Psystrike"], + "abilities": ["Unnerve"] + } + ] + }, + "octillery": { + "level": 95, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Water Spout", "Flash Cannon", "Recover", "Thunder Wave"], + "abilities": ["Guided Missiles"] + }, + { + "role": "AV Pivot", + "movepool": ["Hydro Pump", "Flash Cannon", "Ice Beam", "Flamethrower"], + "abilities": ["Guided Missiles"] + } + ] + }, + "ogerponpixiedust": { + "level": 92, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Ivy Cudgel", "Stomping Tantrum", "Trailblaze", "Swords Dance"], + "abilities": ["Shield Dust"], + "teraTypes": ["Fairy"] + }, + { + "role": "Fast Support", + "movepool": ["Ivy Cudgel", "Spikes", "U-turn", "Synthesis"], + "abilities": ["Shield Dust"], + "teraTypes": ["Fairy"] + } + ] + }, + "parasect": { + "level": 93, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Swords Dance", "Knock Off", "Leech Life", "Seed Bomb"], + "abilities": ["Effect Spore"] + } + ] + }, + "pecharunt": { + "level": 95, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Malignant Chain", "Hex", "Nasty Plot", "Recover"], + "abilities": ["Poison Puppeteer"] + }, + { + "role": "Fast Support", + "movepool": ["Malignant Chain", "Parting Shot", "Foul Play", "Recover"], + "abilities": ["Poison Puppeteer"] + } + ] + }, + "rayquaza": { + "level": 87, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Dragon Pulse", "Dragon Ascent", "Earthquake", "Ice Beam"], + "abilities": ["Primal Shackle"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Dragon Pulse", "Dragon Ascent", "Wild Charge", "Hydro Pump"], + "abilities": ["Primal Shackle"] + } + ] + }, + "regigigas": { + "level": 88, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Acupressure", "Body Slam", "Knock Off", "Earthquake"], + "abilities": ["Slow Start"] + }, + { + "role": "Bulky Support", + "movepool": ["Acupressure", "Body Slam", "Rest", "Sleep Talk"], + "abilities": ["Slow Start"] + } + ] + }, + "rhyperior": { + "level": 95, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Rock Wrecker", "Focus Blast", "Zap Cannon", "Rock Polish"], + "abilities": ["Solid Rock"] + }, + { + "role": "Fast Attacker", + "movepool": ["Rock Blast", "Focus Blast", "Zap Cannon", "Rock Polish"], + "abilities": ["Solid Rock"] + } + ] + }, + "samurott": { + "level": 95, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Sacred Sword", "Razor Shell", "Flip Turn", "Ceaseless Edge", "Knock Off"], + "abilities": ["Supreme Overlord"] + } + ] + }, + "shayminsky": { + "level": 95, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Strength Sap", "Sappy Seed", "Substitute", "Synthesis"], + "abilities": ["Serene Grace"] + } + ] + }, + "shaymin": { + "level": 95, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Seed Flare", "Flower Trick", "Synthesis", "Aromatherapy"], + "abilities": ["Flower Veil"] + } + ] + }, + "shedinja": { + "level": 96, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Swords Dance", "Shadow Claw", "Shadow Sneak", "X-Scissor"], + "abilities": ["Wonder Guard"] + } + ] + }, + "simisear": { + "level": 95, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Fire Blast", "Tera Blast", "Superpower", "Work Up"], + "abilities": ["Blaze"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Fire Blast", "Earth Power", "Substitute", "Tera Blast"], + "abilities": ["Blaze"] + } + ] + }, + "slowking": { + "level": 100, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Chilly Reception", "Sludge Bomb", "Scald", "Ice Beam", "Thunder Wave"], + "abilities": ["Regenerator"] + } + ] + }, + "stakataka": { + "level": 98, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Stack Shield", "Taunt", "Stone Edge", "Heavy Slam"], + "abilities": ["Stack Shift"] + }, + { + "role": "Wallbreaker", + "movepool": ["Stack Shield", "Heat Crash", "Stone Edge", "Heavy Slam"], + "abilities": ["Stack Shift"] + } + ] + }, + "sudowoodo": { + "level": 97, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Stealth Rock", "Curse", "Wood Hammer", "Synthesis", "Drain Punch", "Head Smash"], + "abilities": ["Rock Head"] + } + ] + }, + "sunflora": { + "level": 93, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Growth", "Giga Drain", "Sunny Day", "Weather Ball"], + "abilities": ["Chlorophyll"] + } + ] + }, + "sylveon": { + "level": 95, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Hyper Voice", "Hyper Beam", "Shadow Ball", "Ribbon Shift"], + "abilities": ["Pixilate"] + }, + { + "role": "Bulky Setup", + "movepool": ["Hyper Voice", "Calm Mind", "Shadow Ball", "Ribbon Shift"], + "abilities": ["Pixilate"] + } + ] + }, + "talonflame": { + "level": 95, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Hone Claws", "Flare Blitz", "Roost", "Dual Wingbeat"], + "abilities": ["Gale Wings"] + }, + { + "role": "Fast Attacker", + "movepool": ["Overheat", "Defog", "U-turn", "Acrobatics"], + "abilities": ["Gale Wings"] + } + ] + }, + "torterra": { + "level": 99, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Shell Smash", "Wood Hammer", "Heavy Slam", "Headlong Rush"], + "abilities": ["Shell Armor"] + }, + { + "role": "AV Pivot", + "movepool": ["Trailblaze", "Wood Hammer", "Heavy Slam", "Headlong Rush"], + "abilities": ["Shell Armor"] + } + ] + }, + "trubbish": { + "level": 86, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Autotomize", "Rock Blast", "Drain Punch", "Gunk Shot", "Stomping Tantrum"], + "abilities": ["Stench"] + } + ] + }, + "victini": { + "level": 95, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["V-create", "Fusion Bolt", "Zen Headbutt", "U-turn"], + "abilities": ["Victory Star"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Work Up", "Fusion Bolt", "Searing Shot", "Mega Kick", "Flame Charge"], + "abilities": ["Victory Star"] + } + ] + }, + "volcanion": { + "level": 95, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Steam Eruption", "Flamethrower", "Earth Power", "Flash Cannon"], + "abilities": ["Water Absorb"] + }, + { + "role": "Bulky Support", + "movepool": ["Steam Eruption", "Flamethrower", "Defog", "Toxic"], + "abilities": ["Water Absorb"] + } + ] + }, + "volcarona": { + "level": 95, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Weather Ball", "Morning Sun", "Giga Drain", "Bug Buzz"], + "abilities": ["Drought"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Fiery Dance", "Air Slash", "Solar Beam", "Psychic"], + "abilities": ["Drought"] + } + ] + }, + "weavile": { + "level": 99, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Switcheroo", "Triple Axel", "Knock Off", "Pursuit", "Ice Shard"], + "abilities": ["Growing Bitterness"] + }, + { + "role": "Fast Attacker", + "movepool": ["Obstruct", "Triple Axel", "Knock Off", "Pursuit"], + "abilities": ["Growing Bitterness"] + } + ] + }, + "wyrdeer": { + "level": 97, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Aurora Veil", "Freeze-Dry", "Psychic Noise", "Thunder Wave", "Blizzard"], + "abilities": ["Snow Warning"] + } + ] + }, + "zarude": { + "level": 94, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Heart of Oak", "Power Whip", "Knock Off", "U-turn"], + "abilities": ["Natural Cure"] + } + ] + }, + "zeraora": { + "level": 93, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Plasma Fists", "Close Combat", "Knock Off", "Volt Switch", "Play Rough"], + "abilities": ["Electromorphosis"] + } + ] + } +} diff --git a/data/random-battles/ccapm2025/teams.ts b/data/random-battles/ccapm2025/teams.ts new file mode 100644 index 0000000000..2f812024e5 --- /dev/null +++ b/data/random-battles/ccapm2025/teams.ts @@ -0,0 +1,1151 @@ +import { RandomTeams, type MoveCounter } from "../gen9/teams"; + +// Moves that restore HP: +const RECOVERY_MOVES = [ + 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis', +]; +// Moves that boost Attack: +const PHYSICAL_SETUP = [ + 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance', + 'filletaway', +]; +// Moves which boost Special Attack: +const SPECIAL_SETUP = [ + 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'takeheart', 'torchsong', 'filletaway', +]; +// Some moves that only boost Speed: +const SPEED_SETUP = [ + 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'trailblaze', +]; +// Conglomerate for ease of access +const SETUP = [ + 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance', + 'filletaway', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance', + 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'trickroom', 'workup', 'victorydance', +]; +const SPEED_CONTROL = [ + 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom', +]; +// Hazard-setting moves +const HAZARDS = [ + 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes', +]; +// Protect and its variants +const PROTECT_MOVES = [ + 'banefulbunker', 'burningbulwark', 'protect', 'silktrap', 'spikyshield', +]; +// Moves that switch the user out +const PIVOT_MOVES = [ + 'chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch', +]; + +// Moves that should be paired together when possible +const MOVE_PAIRS = [ + ['lightscreen', 'reflect'], + ['sleeptalk', 'rest'], + ['protect', 'wish'], + ['leechseed', 'protect'], + ['leechseed', 'substitute'], + ['leechseed', 'burningbulwark'], +]; + +/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */ +const PRIORITY_POKEMON = [ + 'breloom', 'brutebonnet', 'cacturne', 'honchkrow', 'mimikyu', 'ragingbolt', 'scizor', +]; + +/** Pokemon who should never be in the lead slot */ +const NO_LEAD_POKEMON = [ + 'Zacian', 'Zamazenta', +]; +const DOUBLES_NO_LEAD_POKEMON = [ + 'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta', +]; +export class RandomC25Teams extends RandomTeams { + override cullMovePool( + types: string[], + moves: Set, + abilities: string[], + counter: MoveCounter, + movePool: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ): void { + if (moves.size + movePool.length <= this.maxMoveCount) return; + // If we have two unfilled moves and only one unpaired move, cull the unpaired move. + if (moves.size === this.maxMoveCount - 2) { + const unpairedMoves = [...movePool]; + for (const pair of MOVE_PAIRS) { + if (movePool.includes(pair[0]) && movePool.includes(pair[1])) { + this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0])); + this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1])); + } + } + if (unpairedMoves.length === 1) { + this.fastPop(movePool, movePool.indexOf(unpairedMoves[0])); + } + } + + // These moves are paired, and shouldn't appear if there is not room for them both. + if (moves.size === this.maxMoveCount - 1) { + for (const pair of MOVE_PAIRS) { + if (movePool.includes(pair[0]) && movePool.includes(pair[1])) { + this.fastPop(movePool, movePool.indexOf(pair[0])); + this.fastPop(movePool, movePool.indexOf(pair[1])); + } + } + } + + // Develop additional move lists + const statusMoves = this.cachedStatusMoves; + + // Team-based move culls + if (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) { + if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect')); + if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.stickyWeb) { + if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.stealthRock) { + if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.defog || teamDetails.rapidSpin) { + if (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog')); + if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.toxicSpikes) { + if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.spikes && teamDetails.spikes >= 2) { + if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.statusCure) { + if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + + if (isDoubles) { + const doublesIncompatiblePairs = [ + // In order of decreasing generalizability + [SPEED_CONTROL, SPEED_CONTROL], + [HAZARDS, HAZARDS], + [PROTECT_MOVES, PROTECT_MOVES], + ['rockslide', 'stoneedge'], + [SETUP, ['fakeout', 'helpinghand']], + [PROTECT_MOVES, 'wideguard'], + [['fierydance', 'fireblast'], 'heatwave'], + ['dazzlinggleam', ['fleurcannon', 'moonblast']], + ['poisongas', ['toxicspikes', 'willowisp']], + [RECOVERY_MOVES, 'healpulse'], + ['lifedew', 'healpulse'], + ['haze', 'icywind'], + [['hydropump', 'muddywater'], ['muddywater', 'scald']], + ['disable', 'encore'], + ['freezedry', 'icebeam'], + ['energyball', 'leafstorm'], + ['wildcharge', 'thunderbolt'], + ['earthpower', 'sandsearstorm'], + ['coaching', ['helpinghand', 'howl']], + ]; + + for (const pair of doublesIncompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); + + if (role !== 'Offensive Protect') this.incompatibleMoves(moves, movePool, PROTECT_MOVES, ['flipturn', 'uturn']); + } + + // General incompatibilities + const incompatiblePairs = [ + // These moves don't mesh well with other aspects of the set + [statusMoves, ['healingwish', 'switcheroo', 'trick']], + [SETUP, PIVOT_MOVES], + [SETUP, HAZARDS], + [SETUP, ['defog', 'nuzzle', 'toxic', 'yawn', 'haze']], + [PHYSICAL_SETUP, PHYSICAL_SETUP], + [SPECIAL_SETUP, 'thunderwave'], + ['substitute', PIVOT_MOVES], + [SPEED_SETUP, ['aquajet', 'rest', 'trickroom']], + ['curse', ['irondefense', 'rapidspin']], + ['dragondance', 'dracometeor'], + + // These attacks are redundant with each other + ['surf', 'hydropump'], + ['liquidation', 'wavecrash'], + ['aquajet', 'flipturn'], + ['gigadrain', 'leafstorm'], + ['powerwhip', 'hornleech'], + [['airslash', 'bravebird', 'hurricane'], ['airslash', 'bravebird', 'hurricane']], + ['knockoff', 'foulplay'], + ['throatchop', ['crunch', 'lashout']], + ['doubleedge', ['bodyslam', 'headbutt']], + ['fireblast', ['fierydance', 'flamethrower']], + ['lavaplume', 'magmastorm'], + ['thunderpunch', 'wildcharge'], + [['thunderbolt', 'discharge', 'thunder'], ['thunderbolt', 'discharge', 'thunder']], + ['gunkshot', ['direclaw', 'poisonjab', 'sludgebomb']], + ['aurasphere', 'focusblast'], + ['closecombat', 'drainpunch'], + ['bugbite', 'pounce'], + [['dragonpulse', 'spacialrend'], 'dracometeor'], + ['heavyslam', 'flashcannon'], + ['alluringvoice', 'dazzlinggleam'], + + // These status moves are redundant with each other + ['taunt', 'disable'], + [['thunderwave', 'toxic'], ['thunderwave', 'willowisp']], + [['thunderwave', 'toxic', 'willowisp'], 'toxicspikes'], + ]; + + for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); + + if (!types.includes('Ice')) this.incompatibleMoves(moves, movePool, 'icebeam', 'icywind'); + + if (!isDoubles) this.incompatibleMoves(moves, movePool, ['taunt', 'strengthsap'], 'encore'); + + if (!types.includes('Dark') && teraType !== 'Dark') this.incompatibleMoves(moves, movePool, 'knockoff', 'suckerpunch'); + + if (!abilities.includes('Prankster')) this.incompatibleMoves(moves, movePool, 'thunderwave', 'yawn'); + + // This space reserved for assorted hardcodes that otherwise make little sense out of context + } + + override randomMoveset( + types: string[], + abilities: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + movePool: string[], + teraType: string, + role: RandomTeamsTypes.Role, + ): Set { + const moves = new Set(); + let counter = this.queryMoves(moves, species, teraType, abilities); + this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role); + + // If there are only four moves, add all moves and return early + if (movePool.length <= this.maxMoveCount) { + for (const moveid of movePool) { + moves.add(moveid); + } + return moves; + } + + const runEnforcementChecker = (checkerName: string) => { + if (!this.moveEnforcementCheckers[checkerName]) return false; + return this.moveEnforcementCheckers[checkerName]( + movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role + ); + }; + + if (role === 'Tera Blast user') { + counter = this.addMove('terablast', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + // Add required move (e.g. Relic Song for Meloetta-P) + if (species.requiredMove) { + const move = this.dex.moves.get(species.requiredMove).id; + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Add other moves you really want to have, e.g. STAB, recovery, setup. + + // PMCM hardcodes (reserve these to when absolutely necessary, let the script do most of the work) + // forces Splash on Chi-Yu's moveset, since it uses Z-Splash + if (species.id === 'chiyu') { + if (movePool.includes('splash')) { + counter = this.addMove('splash', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + // enforces both primary stabs on Infernape + if (species.id === 'infernape' && movePool.includes('mindblown')) { + counter = this.addMove('mindblown', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + counter = this.addMove('alloutassault', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce Facade if Guts is a possible ability + if (movePool.includes('facade') && abilities.includes('Guts')) { + counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce Night Shade, Revelation Dance, Revival Blessing, and Sticky Web + for (const moveid of ['nightshade', 'revelationdance', 'revivalblessing', 'stickyweb']) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Trick Room on Doubles Wallbreaker + if (movePool.includes('trickroom') && role === 'Doubles Wallbreaker') { + counter = this.addMove('trickroom', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce hazard removal on Bulky Support if the team doesn't already have it + if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) { + if (movePool.includes('rapidspin')) { + counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + if (movePool.includes('defog')) { + counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Knock Off on pure Normal- and Fighting-types in singles + if (!isDoubles && types.length === 1 && (types.includes('Normal') || types.includes('Fighting'))) { + if (movePool.includes('knockoff')) { + counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Flip Turn on pure Water-type Wallbreakers + if (types.length === 1 && types.includes('Water') && + role === 'Wallbreaker' && movePool.includes('flipturn')) { + counter = this.addMove('flipturn', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce Spore on Smeargle + if (species.id === 'smeargle') { + if (movePool.includes('spore')) { + counter = this.addMove('spore', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce moves in doubles + if (isDoubles) { + const doublesEnforcedMoves = ['auroraveil', 'mortalspin', 'spore']; + for (const moveid of doublesEnforcedMoves) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + // Enforce Fake Out on slow Pokemon + if (movePool.includes('fakeout') && species.baseStats.spe <= 50) { + counter = this.addMove('fakeout', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + // Enforce Tailwind on Prankster and Gale Wings users + if (movePool.includes('tailwind') && (abilities.includes('Prankster') || abilities.includes('Gale Wings'))) { + counter = this.addMove('tailwind', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + // Enforce Thunder Wave on Prankster users as well + if (movePool.includes('thunderwave') && abilities.includes('Prankster')) { + counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce STAB priority + if ( + ['Bulky Attacker', 'Bulky Setup', 'Wallbreaker', 'Doubles Wallbreaker'].includes(role) || + PRIORITY_POKEMON.includes(species.id) + ) { + const priorityMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if ( + types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) && + (move.basePower || move.basePowerCallback) + ) { + priorityMoves.push(moveid); + } + } + if (priorityMoves.length) { + const moveid = this.sample(priorityMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce a single STAB for Moltres + if (species.id === 'moltres') { + const typeToEnforce = this.randomChance(1, 2) ? 'Fire' : 'Flying'; + + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && typeToEnforce === moveType) { + stabMoves.push(moveid); + } + } + while (runEnforcementChecker(typeToEnforce)) { + if (!stabMoves.length) break; + const moveid = this.sampleNoReplace(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce STAB + for (const type of types) { + // Moltres already has STAB, so ignore this block + if (species.id === 'moltres') break; + // prevents Meowscarada from being enforced stab moves + if (species.id === 'meowscarada') break; + // Check if a STAB move of that type should be required + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) { + stabMoves.push(moveid); + } + } + while (runEnforcementChecker(type)) { + if (!stabMoves.length) break; + const moveid = this.sampleNoReplace(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Tera STAB + // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care) + if (!counter.get('stabtera') && !['Bulky Support', 'Doubles Support'].includes(role) && + !abilities.includes('Protean')) { + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && teraType === moveType) { + stabMoves.push(moveid); + } + } + if (stabMoves.length) { + const moveid = this.sample(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // If no STAB move was added, add a STAB move + // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care) + if (!counter.get('stab') && !abilities.includes('Protean')) { + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) { + stabMoves.push(moveid); + } + } + if (stabMoves.length) { + const moveid = this.sample(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce recovery + if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) { + const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid)); + if (recoveryMoves.length) { + const moveid = this.sample(recoveryMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce setup + if (role.includes('Setup') || role === 'Tera Blast user') { + // First, try to add a non-Speed setup move + const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid)); + if (nonSpeedSetupMoves.length) { + const moveid = this.sample(nonSpeedSetupMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } else { + // No non-Speed setup moves, so add any (Speed) setup move + const setupMoves = movePool.filter(moveid => SETUP.includes(moveid)); + if (setupMoves.length) { + const moveid = this.sample(setupMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + + // Enforce redirecting moves and Fake Out on Doubles Support + if (role === 'Doubles Support') { + for (const moveid of ['fakeout', 'followme', 'ragepowder']) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + + // Enforce Protect + if (role.includes('Protect')) { + const protectMoves = movePool.filter(moveid => PROTECT_MOVES.includes(moveid)); + if (protectMoves.length) { + const moveid = this.sample(protectMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce a move not on the noSTAB list + if (!counter.damagingMoves.size) { + // Choose an attacking move + const attackingMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid); + } + if (attackingMoves.length) { + const moveid = this.sample(attackingMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce coverage move + if (!['AV Pivot', 'Fast Support', 'Bulky Support', 'Bulky Protect', 'Doubles Support'].includes(role)) { + if (counter.damagingMoves.size === 1) { + // Find the type of the current attacking move + const currentAttackType = counter.damagingMoves.values().next().value!.type; + // Choose an attacking move that is of different type to the current single attack + const coverageMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) { + if (currentAttackType !== moveType) coverageMoves.push(moveid); + } + } + if (coverageMoves.length) { + const moveid = this.sample(coverageMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + + // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves. + // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition. + + // Choose remaining moves randomly from movepool and add them to moves list: + while (moves.size < this.maxMoveCount && movePool.length) { + if (moves.size + movePool.length <= this.maxMoveCount) { + for (const moveid of movePool) { + moves.add(moveid); + } + break; + } + const moveid = this.sample(movePool); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + for (const pair of MOVE_PAIRS) { + if (moveid === pair[0] && movePool.includes(pair[1])) { + counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + if (moveid === pair[1] && movePool.includes(pair[0])) { + counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + return moves; + } + + override getAbility( + types: string[], + moves: Set, + abilities: string[], + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ): string { + if (abilities.length <= 1) return abilities[0]; + + // Hard-code abilities here + if (species.id === 'drifblim') return moves.has('defog') ? 'Aftermath' : 'Unburden'; + // if (abilities.includes('Flash Fire') && this.dex.getEffectiveness('Fire', teraType) >= 1) return 'Flash Fire'; + if ((species.id === 'thundurus' || species.id === 'tornadus') && !counter.get('Physical')) return 'Prankster'; + if (species.id === 'swampert' && (counter.get('Water') || moves.has('flipturn'))) return 'Torrent'; + if (species.id === 'toucannon' && counter.get('skilllink')) return 'Skill Link'; + if (abilities.includes('Slush Rush') && moves.has('snowscape')) return 'Slush Rush'; + if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim'; + + const abilityAllowed: string[] = []; + // Obtain a list of abilities that are allowed (not culled) + for (const ability of abilities) { + if (!this.shouldCullAbility( + ability, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role + )) { + abilityAllowed.push(ability); + } + } + + // Pick a random allowed ability + if (abilityAllowed.length >= 1) return this.sample(abilityAllowed); + + // If all abilities are rejected, prioritize weather abilities over non-weather abilities + if (!abilityAllowed.length) { + const weatherAbilities = abilities.filter( + a => ['Chlorophyll', 'Hydration', 'Sand Force', 'Sand Rush', 'Slush Rush', 'Solar Power', 'Swift Swim'].includes(a) + ); + if (weatherAbilities.length) return this.sample(weatherAbilities); + } + + // Pick a random ability + return this.sample(abilities); + } + + override getPriorityItem( + ability: string, + types: string[], + moves: Set, + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ) { + if (!isDoubles) { + if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) { + return 'Booster Energy'; + } + if (species.id === 'lokix') { + return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb'; + } + } + if (species.requiredItems) { + // Z-Crystals aren't available in Gen 9, so require Plates + if (species.baseSpecies === 'Arceus') { + return species.requiredItems[0]; + } + return this.sample(species.requiredItems); + } + if (species.id === 'pikachu') return 'Light Ball'; + if (role === 'AV Pivot') return 'Assault Vest'; + if (species.id === 'alcremie') return 'Sitrus Berry'; + if (species.id === 'aurorus') return 'Restoration Capsule'; + if (species.id === 'darmanitan') return 'Darminitanite'; + if (species.id === 'diancie') { // oh god + const result = this.random(18); + if (result === 0) { + return 'Bug Gem'; + } else if (result === 1) { + return 'Dragon Gem'; + } else if (result === 2) { + return 'Dark Gem'; + } else if (result === 3) { + return 'Electric Gem'; + } else if (result === 4) { + return 'Fairy Gem'; + } else if (result === 5) { + return 'Fighting Gem'; + } else if (result === 6) { + return 'Fire Gem'; + } else if (result === 7) { + return 'Flying Gem'; + } else if (result === 8) { + return 'Ghost Gem'; + } else if (result === 9) { + return 'Grass Gem'; + } else if (result === 10) { + return 'Ghost Gem'; + } else if (result === 11) { + return 'Ice Gem'; + } else if (result === 12) { + return 'Normal Gem'; + } else if (result === 13) { + return 'Poison Gem'; + } else if (result === 14) { + return 'Psychic Gem'; + } else if (result === 15) { + return 'Rock Gem'; + } else if (result === 16) { + return 'Steel Gem'; + } else { + return 'Water Gem'; + } + } + if (species.id === 'drifblim' || species.id === 'zarude') return 'Berserk Gene'; + if (species.id === 'darmanitan') return 'Darminitanite'; + if (species.id === 'emolga') return 'Emolgite'; + if (species.id === 'flygon') return 'Flygonite'; + if (species.id === 'darmanitan') return 'Darminitanite'; + if (species.id === 'genesect') { // not as bad + const result = this.random(4); + if (result === 0) { + return 'Burn Drive'; + } else if (result === 1) { + return 'Chill Drive'; + } else if (result === 2) { + return 'Douse Drive'; + } else { + return 'Shock Drive'; + } + } + if (species.id === 'gliscor') return 'Venom Stake'; + if (species.id === 'luvdisc' && moves.has('splash')) return 'Normalium Z'; + if (species.id === 'mamoswine') return 'Mysterious Tusk'; + if (species.id === 'parasect') return 'Dreary Mushroom'; + if (species.id === 'simisear') return 'Ultrasimisearium Z'; + if (species.id === 'rhyperior' && !moves.has('rockblast')) return 'Weakness Policy'; + if (species.id === 'shedinja') return 'Heavy-Duty Boots'; + if (species.id === 'blaziken' && !moves.has('flamecharge')) return 'Salac Berry'; + if (types.includes('Normal') && moves.has('doubleedge') && moves.has('fakeout')) return 'Silk Scarf'; + if ( + species.id === 'froslass' || moves.has('populationbomb') || + (ability === 'Hustle' && counter.get('setup') && !isDoubles && this.randomChance(1, 2)) + ) return 'Wide Lens'; + if (species.id === 'smeargle') return 'Focus Sash'; + if (moves.has('clangoroussoul') || (species.id === 'toxtricity' && moves.has('shiftgear'))) return 'Throat Spray'; + if ( + (species.baseSpecies === 'Magearna' && role === 'Tera Blast user') || + ((species.id === 'calyrexice' || species.id === 'necrozmaduskmane') && isDoubles) + ) return 'Weakness Policy'; + if (['dragonenergy', 'lastrespects', 'waterspout'].some(m => moves.has(m))) return 'Choice Scarf'; + if ( + !isDoubles && (ability === 'Imposter' || (species.id === 'magnezone' && role === 'Fast Attacker')) + ) return 'Choice Scarf'; + if (species.id === 'rampardos' && (role === 'Fast Attacker' || isDoubles)) return 'Choice Scarf'; + if (species.id === 'palkia' && counter.get('Status')) return 'Lustrous Orb'; + if ( + moves.has('courtchange') || + !isDoubles && (species.id === 'luvdisc' || (species.id === 'terapagos' && !moves.has('rest'))) + ) return 'Heavy-Duty Boots'; + if ( + ['Cheek Pouch', 'Cud Chew', 'Harvest', 'Ripen'].some(m => ability === m) || + moves.has('bellydrum') || moves.has('filletaway') + ) { + return 'Sitrus Berry'; + } + if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) { + if ( + species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && + role !== 'Wallbreaker' && role !== 'Doubles Wallbreaker' && !counter.get('priority') + ) { + return 'Choice Scarf'; + } else { + return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs'; + } + } + if (counter.get('Status') && (species.name === 'Latias' || species.name === 'Latios')) return 'Soul Dew'; + if (species.id === 'scyther' && !isDoubles) return (isLead && !moves.has('uturn')) ? 'Eviolite' : 'Heavy-Duty Boots'; + if (ability === 'Poison Heal' || ability === 'Quick Feet') return 'Toxic Orb'; + if (species.nfe) return 'Eviolite'; + if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) { + return (types.includes('Fire') || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb'; + } + if (ability === 'Magic Guard' || (ability === 'Sheer Force' && counter.get('sheerforce'))) return 'Life Orb'; + if (ability === 'Anger Shell') return this.sample(['Expert Belt', 'Lum Berry', 'Scope Lens', 'Sitrus Berry']); + if (moves.has('dragondance') && isDoubles) return 'Clear Amulet'; + if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice'; + if (ability === 'Unburden') { + return (moves.has('closecombat') || moves.has('leafstorm')) ? 'White Herb' : 'Sitrus Berry'; + } + if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb'; + if (moves.has('meteorbeam') || (moves.has('electroshot') && !teamDetails.rain)) return 'Power Herb'; + if (moves.has('acrobatics') && ability !== 'Protosynthesis') return ''; + if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay'; + if (ability === 'Gluttony') return `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`; + if (species.id === 'giratina' && !isDoubles && moves.has('rest') && !moves.has('sleeptalk')) return 'Leftovers'; + if ( + moves.has('rest') && !moves.has('sleeptalk') && + ability !== 'Natural Cure' && ability !== 'Shed Skin' + ) { + return 'Chesto Berry'; + } + if ( + species.id !== 'yanmega' && + this.dex.getEffectiveness('Rock', species) >= 2 && (!types.includes('Flying') || !isDoubles) + ) return 'Heavy-Duty Boots'; + } + + override randomSet( + s: string | Species, + teamDetails: RandomTeamsTypes.TeamDetails = {}, + isLead = false, + isDoubles = false + ): RandomTeamsTypes.RandomSet { + const species = this.dex.species.get(s); + const forme = this.getForme(species); + const sets = this.randomSets[species.id]["sets"]; + const possibleSets: RandomTeamsTypes.RandomSetData[] = []; + + const ruleTable = this.dex.formats.getRuleTable(this.format); + + for (const set of sets) { + // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy. + const abilities = set.abilities!; + if ( + isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) && + set.role === 'Fast Bulky Setup' + ) continue; + // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented. + if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') { + continue; + } + possibleSets.push(set); + } + const set = this.sampleIfArray(possibleSets); + const role = set.role; + const movePool: string[] = []; + for (const movename of set.movepool) { + movePool.push(this.dex.moves.get(movename).id); + } + const teraTypes = set.teraTypes!; + let teraType = this.sampleIfArray(teraTypes); + + let ability = ''; + let item = undefined; + + const evs = { hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85 }; + const ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 }; + + const types = species.types; + const abilities = set.abilities!; + + // Get moves + const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role); + const counter = this.queryMoves(moves, species, teraType, abilities); + + // Get ability + ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role); + + // Get items + // First, the priority items + item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role); + if (item === undefined) { + if (isDoubles) { + item = this.getDoublesItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role); + } else { + item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role); + } + } + + // Get level + const level = this.getLevel(species, isDoubles); + + // Prepare optimal HP + const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots'; + let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); + // Crash damage move users want an odd HP to survive two misses + if (['axekick', 'highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; + while (evs.hp > 1) { + const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item))) { + // Two Substitutes should activate Sitrus Berry + if (hp % 4 === 0) break; + } else if ((moves.has('bellydrum') || moves.has('filletaway')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) { + // Belly Drum should activate Sitrus Berry + if (hp % 2 === 0) break; + } else if (moves.has('substitute') && moves.has('endeavor')) { + // Luvdisc should be able to Substitute down to very low HP + if (hp % 4 > 0) break; + } else { + // Maximize number of Stealth Rock switch-ins + if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb'].includes(item)) break; + if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break; + // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry + if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break; + } + evs.hp -= 4; + } + + // Minimize confusion damage + const noAttackStatMoves = [...moves].every(m => { + const move = this.dex.moves.get(m); + if (move.damageCallback || move.damage) return true; + if (move.id === 'shellsidearm') return false; + // Magearna and doubles Dragonite, though these can work well as a general rule + if (move.id === 'terablast' && ( + species.id === 'porygon2' || moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa) + ) return false; + return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay'; + }); + // prevents Illumise (who can turn into Volbeat with Physical moves) from having 0 Atk EVs + if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' && + species.id !== 'illumise') { + evs.atk = 0; + ivs.atk = 0; + } + + if (moves.has('gyroball') || moves.has('trickroom')) { + evs.spe = 0; + ivs.spe = 0; + } + + // Enforce Tera Type after all set generation is done to prevent infinite generation + if (this.forceTeraType) teraType = this.forceTeraType; + + // shuffle moves to add more randomness to camomons + const shuffledMoves = Array.from(moves); + this.prng.shuffle(shuffledMoves); + return { + name: species.baseSpecies, + species: forme, + gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')), + shiny: this.randomChance(1, 1024), + level, + moves: shuffledMoves, + ability, + evs, + ivs, + item, + teraType, + role, + }; + } + + override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json'); + + randomC25Team() { + this.enforceNoDirectCustomBanlistChanges(); + + const seed = this.prng.getSeed(); + const ruleTable = this.dex.formats.getRuleTable(this.format); + const pokemon: RandomTeamsTypes.RandomSet[] = []; + + // For Monotype + const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause'); + const isDoubles = this.format.gameType !== 'singles'; + const typePool = this.dex.types.names().filter(name => name !== "Stellar"); + const type = this.forceMonotype || this.sample(typePool); + + // PotD stuff + const usePotD = global.Config && Config.potd && ruleTable.has('potd'); + const potd = usePotD ? this.dex.species.get(Config.potd) : null; + + const baseFormes: { [k: string]: number } = {}; + + const typeCount: { [k: string]: number } = {}; + const typeComboCount: { [k: string]: number } = {}; + const typeWeaknesses: { [k: string]: number } = {}; + const typeDoubleWeaknesses: { [k: string]: number } = {}; + const teamDetails: RandomTeamsTypes.TeamDetails = {}; + // let numMaxLevelPokemon = 0; + + let pokemonList = Object.keys(this.randomSets); + const CAPTiers = ["CAP", "CAP NFE", "CAP LC"]; + if (pokemonList.filter(mon => CAPTiers.includes(this.dex.species.get(mon).tier)).length >= 6) { + if (ruleTable.tagRules.includes("+pokemontag:cap")) + pokemonList = pokemonList.filter(mon => CAPTiers.includes(this.dex.species.get(mon).tier)); + else + pokemonList = pokemonList.filter(mon => !CAPTiers.includes(this.dex.species.get(mon).tier)); + } + const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); + + let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1; + while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { + const baseSpecies = this.sampleNoReplace(baseSpeciesPool); + let species = this.dex.species.get(this.sample(pokemonPool[baseSpecies])); + if (!species.exists) continue; + + // Limit to one of each species (Species Clause) + if (baseFormes[species.baseSpecies]) continue; + + // Treat Ogerpon formes and Terapagos like the Tera Blast user role; reject if team has one already + if (['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id) && teamDetails.teraBlast) continue; + + // Illusion shouldn't be on the last slot + if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue; + + const types = species.types; + const typeCombo = types.slice().sort().join(); + const weakToFreezeDry = ( + this.dex.getEffectiveness('Ice', species) > 0 || + (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water')) + ); + // Dynamically scale limits for different team sizes. The default and minimum value is 1. + const limitFactor = Math.round(this.maxTeamSize / 6) || 1; + + if (!isMonotype && !this.forceMonotype) { + let skip = false; + + // Limit two of any type + for (const typeName of types) { + if (typeCount[typeName] >= 2 * limitFactor) { + skip = true; + break; + } + } + if (skip) continue; + + // Limit three weak to any type, and one double weak to any type + for (const typeName of this.dex.types.names()) { + // it's weak to the type + if (this.dex.getEffectiveness(typeName, species) > 0) { + if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0; + if (typeWeaknesses[typeName] >= 3 * limitFactor) { + skip = true; + break; + } + } + if (this.dex.getEffectiveness(typeName, species) > 1) { + if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0; + if (typeDoubleWeaknesses[typeName] >= limitFactor) { + skip = true; + break; + } + } + } + if (skip) continue; + + // Count Dry Skin/Fluffy as Fire weaknesses + if ( + this.dex.getEffectiveness('Fire', species) === 0 && + Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length + ) { + if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0; + if (typeWeaknesses['Fire'] >= 3 * limitFactor) continue; + } + + // Limit four weak to Freeze-Dry + if (weakToFreezeDry) { + if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0; + if (typeWeaknesses['Freeze-Dry'] >= 4 * limitFactor) continue; + } + + // Remove limit of one level 100 Pokemon + // if (!this.adjustLevel && (this.getLevel(species, isDoubles) === 100) && numMaxLevelPokemon >= limitFactor) { + // continue; + // } + + // Check compatibility with team + if (!this.getPokemonCompatibility(species, pokemon, isDoubles)) continue; + } + + // Limit three of any type combination in Monotype + if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue; + + // The Pokemon of the Day + if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd; + + let set: RandomTeamsTypes.RandomSet; + + if (leadsRemaining) { + if ( + isDoubles && DOUBLES_NO_LEAD_POKEMON.includes(species.baseSpecies) || + !isDoubles && NO_LEAD_POKEMON.includes(species.baseSpecies) + ) { + if (pokemon.length + leadsRemaining === this.maxTeamSize) continue; + set = this.randomSet(species, teamDetails, false, isDoubles); + pokemon.push(set); + } else { + set = this.randomSet(species, teamDetails, true, isDoubles); + pokemon.unshift(set); + leadsRemaining--; + } + } else { + set = this.randomSet(species, teamDetails, false, isDoubles); + pokemon.push(set); + } + + // Don't bother tracking details for the last Pokemon + if (pokemon.length === this.maxTeamSize) break; + + // Now that our Pokemon has passed all checks, we can increment our counters + baseFormes[species.baseSpecies] = 1; + + // Increment type counters + for (const typeName of types) { + if (typeName in typeCount) { + typeCount[typeName]++; + } else { + typeCount[typeName] = 1; + } + } + if (typeCombo in typeComboCount) { + typeComboCount[typeCombo]++; + } else { + typeComboCount[typeCombo] = 1; + } + + // Increment weakness counter + for (const typeName of this.dex.types.names()) { + // it's weak to the type + if (this.dex.getEffectiveness(typeName, species) > 0) { + typeWeaknesses[typeName]++; + } + if (this.dex.getEffectiveness(typeName, species) > 1) { + typeDoubleWeaknesses[typeName]++; + } + } + // Count Dry Skin/Fluffy as Fire weaknesses + if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) { + typeWeaknesses['Fire']++; + } + if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++; + + // Increment level 100 counter + // if (set.level === 100) numMaxLevelPokemon++; + + // Track what the team has + if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1; + if (set.ability === 'Drought' || set.ability === 'Orichalcum Pulse' || set.moves.includes('sunnyday')) { + teamDetails.sun = 1; + } + if (set.ability === 'Sand Stream') teamDetails.sand = 1; + if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) { + teamDetails.snow = 1; + } + if (set.moves.includes('healbell')) teamDetails.statusCure = 1; + if (set.moves.includes('spikes') || set.moves.includes('ceaselessedge')) { + teamDetails.spikes = (teamDetails.spikes || 0) + 1; + } + if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 1; + if (set.moves.includes('stealthrock') || set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1; + if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1; + if (set.moves.includes('defog')) teamDetails.defog = 1; + if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1; + if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) { + teamDetails.screens = 1; + } + if (set.role === 'Tera Blast user' || ['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id)) { + teamDetails.teraBlast = 1; + } + } + if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built + throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`); + } + + if (pokemon.some(mon => mon.name === 'Jirachi')) { + for (const set of pokemon) { + if (!set.moves.includes('Hold Hands')) set.moves.push('Hold Hands'); + } + } + + return pokemon; + } +} + +export default RandomC25Teams; diff --git a/data/random-battles/chatbats/random-sets.json b/data/random-battles/chatbats/random-sets.json index 615908c2c4..541a21935b 100644 --- a/data/random-battles/chatbats/random-sets.json +++ b/data/random-battles/chatbats/random-sets.json @@ -1,1188 +1,1188 @@ -{ - "volcarona": { - "level": 84, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Whirlwind", "Fiery Dance", "Will-o-wisp", "Morning Sun"], - "abilities": ["Fluffy"], - "teraTypes": ["Water", "Steel"] - } - ] - }, - "golemalola": { - "level": 94, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Double-Edge", "Rock Polish", "Earthquake", "Stone Edge"], - "abilities": ["Galvanize"], - "teraTypes": ["Electric", "Grass"] - } - ] - }, - "lurantis": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Leaf Storm", "Power Whip", "Superpower", "Ice Hammer", "Synthesis"], - "abilities": ["Contrary"], - "teraTypes": ["Ice"] - } - ] - }, - "ironcrown": { - "level": 78, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["Future Sight", "Volt Switch", "Tachyon Cutter", "King's Shield", "Stealth Rock", "Rest"], - "abilities": ["Queenly Majesty"], - "teraTypes": ["Water", "Steel"] - }, - { - "role": "Bulky Setup", - "movepool": ["Iron Defense", "Body Press", "Tachyon Cutter", "Rest", "Stealth Rock"], - "abilities": ["Battle Armor"], - "teraTypes": ["Fighting"] - } - ] - }, - "mamoswine": { - "level": 82, - "sets": [ - { - "role": "AV Pivot", - "movepool": ["Icicle Crash", "Ice Shard", "Earthquake", "Ancient Power"], - "abilities": ["Thick Fat"], - "teraTypes": ["Ice", "Ground"] - } - ] - }, - "ceruledge": { - "level": 82, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Bitter Blade", "Close Combat", "Poltergeist", "Shadow Sneak", "Swords Dance"], - "abilities": ["Weak Armor"], - "teraTypes": ["Fighting", "Fire", "Ghost"] - } - ] - }, - "carbink": { - "level": 84, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Iron Defense", "Body Press", "Moonblast", "Moonlight"], - "abilities": ["Magic Bounce"], - "teraTypes": ["Fighting"] - }, - { - "role": "Bulky Support", - "movepool": ["Volt Switch", "Moonlight", "Spikes", "Stealth Rock", "Body Press", "Moonblast"], - "abilities": ["Magic Bounce"], - "teraTypes": ["Steel"] - } - ] - }, - "moltres": { - "level": 78, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Brave Bird", "Flare Blitz", "Wood Hammer", "Wave Crash", "Defog", "U-Turn"], - "abilities": ["Magic Guard"], - "teraTypes": ["Grass"] - } - ] - }, - "kommoo": { - "level": 72, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Clangorous Soul", "Aura Sphere", "Close Combat", "Clanging Scales", "Boomburst"], - "abilities": ["Punk Rock"], - "teraTypes": ["Normal"] - } - ] - }, - "illumise": { - "level": 90, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Bug Buzz", "Quiver Dance", "Ice Beam", "Thunderbolt"], - "abilities": ["Call Volbeat"], - "teraTypes": ["Electric"] - } - ] - }, - "volbeat": { - "level": 90, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Victory Dance", "Lunge", "Mighty Cleave", "Earthquake"], - "abilities": ["Call Illumise"], - "teraTypes": ["Rock"] - } - ] - }, - "abomasnow": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Aurora Veil", "Blizzard", "Apple Acid", "Parting Shot"], - "abilities": ["Snow Warning"], - "teraTypes": ["Dragon"] - } - ] - }, - "abomasnowmega": { - "level": 86, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Glacial Lance", "Wood Hammer", "Earthquake", "Ice Shard", "Snowscape"], - "abilities": ["Snow Warning"], - "teraTypes": ["Grass"] - } - ] - }, - "dugtrio": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Sucker Punch", "Mighty Cleave", "Earthquake", "Salt Cure", "Acrobatics", "Swords Dance"], - "abilities": ["Arena Trap"], - "teraTypes": ["Flying", "Ground"] - }, - { - "role": "Fast Attacker", - "movepool": ["Sucker Punch", "Mighty Cleave", "Earthquake", "Tera Blast"], - "abilities": ["Arena Trap"], - "teraTypes": ["Flying"] - } - ] - }, - "altariamega": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Return", "Dragon Dance", "Earthquake", "Roost"], - "abilities": ["Fluffy"], - "teraTypes": ["Normal"] - }, - { - "role": "Bulky Attacker", - "movepool": ["Beak Blast", "Roost", "Return", "Draco Meteor", "Explosion"], - "abilities": ["Fluffy"], - "teraTypes": ["Normal"] - } - ] - }, - "tyranitar": { - "level": 86, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Stone Axe", "Ceaseless Edge", "Kowtow Cleave", "Pursuit", "Switcheroo", "Accelerock", "Earthquake"], - "abilities": ["Sharpness"], - "teraTypes": ["Rock", "Dark", "Ghost"] - } - ] - }, - "tyranitarmega": { - "level": 82, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["Sandsear Storm", "Power Gem", "Ice Beam", "Draco Meteor", "Dragon Pulse", "Mystical Power"], - "abilities": ["Sand Stream"], - "teraTypes": ["Rock"] - } - ] - }, - "mimikyu": { - "level": 86, - "sets": [ - { - "role": "Fast Support", - "movepool": ["Spirit Shackle", "Play Rough", "Drain Punch", "Taunt", "Destiny Bond", "Obstruct", "U-turn", "Will-O-Wisp"], - "abilities": ["Disguise"], - "teraTypes": ["Dark"] - } - ] - }, - "mesprit": { - "level": 82, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Agility", "Psychic", "Stored Power", "Freeze-Dry", "Torch Song"], - "abilities": ["Liquid Voice"], - "teraTypes": ["Poison", "Water"] - }, - { - "role": "Bulky Setup", - "movepool": ["Cosmic Power", "Stored Power", "Torch Song", "Aqua Ring"], - "abilities": ["Liquid Voice"], - "teraTypes": ["Poison"] - } - ] - }, - "electrode": { - "level": 88, - "sets": [ - { - "role": "Fast Support", - "movepool": ["Volt Switch", "Supercell Slam", "Double-Edge", "Encore", "Rapid Spin"], - "abilities": ["Short Fuse"], - "teraTypes": ["Electric", "Grass"] - } - ] - }, - "taurospaldeacombat": { - "level": 78, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Raging Bull", "Extreme Speed", "U-turn", "Knock Off"], - "abilities": ["Adaptability"], - "teraTypes": ["Normal"] - } - ] - }, - "chiyu": { - "level": 80, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Splash", "Triple Dive", "Pyro Ball", "Sucker Punch", "Knock Off"], - "abilities": ["Water Absorb"], - "teraTypes": ["Water", "Fire"] - } - ] - }, - "wochien": { - "level": 82, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Leech Seed", "Strength Sap", "Giga Drain", "Ruination", "Ingrain", "Parting Shot", "Bouncy Bubble"], - "abilities": ["Liquid Ooze"], - "teraTypes": ["Steel"] - } - ] - }, - "staraptor": { - "level": 88, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Brave Bird", "Jump Kick", "U-turn", "Head Smash", "Wave Crash", "Flare Blitz"], - "abilities": ["Reckless"], - "teraTypes": ["Fighting"] - } - ] - }, - "archaludon": { - "level": 78, - "sets": [ - { - "role": "AV Pivot", - "movepool": ["Electro Shot", "Flash Cannon", "Hydro Pump", "Scald", "Draco Meteor"], - "abilities": ["Hydroelectric Dam"], - "teraTypes": ["Water", "Electric"] - }, - { - "role": "Bulky Attacker", - "movepool": ["Body Press", "Draco Meteor", "Flash Cannon", "Stealth Rock", "Scald", "Thunderbolt"], - "abilities": ["Stamina"], - "teraTypes": ["Fighting", "Flying", "Fairy"] - } - ] - }, - "malamar": { - "level": 94, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Will-O-Wisp", "Recover", "Knock Off", "Psychic Noise", "Eerie Spell", "Spirit Break", "Sweet Kiss"], - "abilities": ["Flip Flop"], - "teraTypes": ["Steel"] - } - ] - }, - "empoleon": { - "level": 82, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Nasty Plot", "Tachyon Cutter", "Air Slash", "Secret Sword", "Roost"], - "abilities": ["Sharpness"], - "teraTypes": ["Steel", "Ground"] - }, - { - "role": "Setup Sweeper", - "movepool": ["Nasty Plot", "Tachyon Cutter", "Air Slash", "Water Shuriken"], - "abilities": ["Sharpness"], - "teraTypes": ["Steel", "Ground"] - } - ] - }, - "glastrier": { - "level": 82, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Swords Dance", "Close Combat", "Icicle Crash", "High Horsepower", "Heavy Slam"], - "abilities": ["Frozen Armor"], - "teraTypes": ["Water"] - }, - { - "role": "AV Pivot", - "movepool": ["Close Combat", "Icicle Crash", "High Horsepower", "Heavy Slam"], - "abilities": ["Frozen Armor"], - "teraTypes": ["Water"] - } - ] - }, - "regieleki": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Explosion", "Extreme Speed", "Volt Switch", "Rapid Spin", "Soak"], - "abilities": ["Galvanize"], - "teraTypes": ["Electric"] - } - ] - }, - "lycanrocmidnight": { - "level": 88, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Swords Dance", "Bone Rush", "Storm Throw", "Rock Blast", "Accelerock"], - "abilities": ["Technician"], - "teraTypes": ["Rock", "Flying", "Fighting"] - } - ] - }, - "lycanroc": { - "level": 92, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Stone Edge", "Fire Lash", "U-turn", "Spikes", "Close Combat", "Stealth Rock", "Accelerock"], - "abilities": ["Drought"], - "teraTypes": ["Water", "Fire"] - } - ] - }, - "lycanrocdusk": { - "level": 86, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Mountain Maw", "Crunch", "Fire Fang", "Ice Fang", "Thunder Fang", "Psychic Fangs"], - "abilities": ["Strong Jaw"], - "teraTypes": ["Rock"] - } - ] - }, - "dodrio": { - "level": 84, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Triple Arrows", "Brave Bird", "Knock Off", "Obstruct"], - "abilities": ["Speed Boost"], - "teraTypes": ["Fighting"] - }, - { - "role": "Wallbreaker", - "movepool": ["Triple Arrows", "Drill Peck", "Knock Off", "Obstruct"], - "abilities": ["Speed Boost"], - "teraTypes": ["Fighting"] - } - ] - }, - "whiscash": { - "level": 88, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Stealth Rock", "Spikes", "Flip Turn", "Scald", "Earthquake", "Toxic"], - "abilities": ["Regenerator"], - "teraTypes": ["Poison"] - } - ] - }, - "hippowdon": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Stealth Rock", "Salt Cure", "Sand Tomb", "Slack Off"], - "abilities": ["Earth Eater"], - "teraTypes": ["Steel"] - } - ] - }, - "cramorant": { - "level": 84, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Defog", "Roost", "Beak Blast", "Surf"], - "abilities": ["Gulp Missile"], - "teraTypes": ["Ground", "Dragon"] - } - ] - }, - "grafaiai": { - "level": 88, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Acrobatics", "Bulk Up", "Double-Edge", "Drain Punch", "Scavenge"], - "abilities": ["Unburden"], - "teraTypes": ["Fighting", "Flying"] - } - ] - }, - "tatsugiri": { - "level": 84, - "sets": [ - { - "role": "Fast Support", - "movepool": ["Switcheroo", "Sashimi Shuffle", "Twister", "Water Spout"], - "abilities": ["Regenerator"], - "teraTypes": ["Water"] - } - ] - }, - "kyurem": { - "level": 78, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Dragon Dance", "Scale Shot", "Icicle Spear", "Earthquake"], - "abilities": ["Skill Link"], - "teraTypes": ["Dragon"] - } - ] - }, - "roaringmoon": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["U-turn", "Jaw Lock", "Glaive Rush", "Fire Lash", "Roost"], - "abilities": ["Shadow Shield"], - "teraTypes": ["Fire", "Poison"] - } - ] - }, - "milotic": { - "level": 80, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Bouncy Bubble", "Recover", "Haze", "Moonblast"], - "abilities": ["Aqua Veil"], - "teraTypes": ["Grass"] - } - ] - }, - "gogoat": { - "level": 90, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["Milk Drink", "Horn Leech", "Head Smash", "High Horsepower", "Grassy Glide"], - "abilities": ["Grass Pelt"], - "teraTypes": ["Water"] - } - ] - }, - "clodsire": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Barb Barrage", "Earthquake", "Recover", "Spikes", "Stealth Rock", "Toxic Spikes"], - "abilities": ["Still Water"], - "teraTypes": ["Flying", "Dark"] - } - ] - }, - "masquerain": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Sticky Web", "Hurricane", "Bug Buzz", "U-turn", "Roost"], - "abilities": ["Intimidate"], - "teraTypes": ["Ground"] - } - ] - }, - "masquerainmega": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Quiver Dance", "Weather Ball", "Bug Buzz", "Dark Pulse", "Hurricane", "Ice Beam"], - "abilities": ["Intimidate"], - "teraTypes": ["Normal"] - } - ] - }, - "kyuremblack": { - "level": 80, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Fusion Bolt", "Ice Hammer", "Dragon Hammer", "Earthquake", "Rock Slide", "Roost"], - "abilities": ["Teravolt"], - "teraTypes": ["Ice"] - } - ] - }, - "ironthorns": { - "level": 92, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Sand Tomb", "Stealth Rock", "Iron Strike", "Knock Off"], - "abilities": ["Iron Barbs"], - "teraTypes": ["Steel"] - } - ] - }, - "dudunsparce": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Stomping Tantrum", "Boomburst", "Stealth Rock", "Roost", "Glare"], - "abilities": ["Earth Eater"], - "teraTypes": ["Poison"] - } - ] - }, - "chienpao": { - "level": 82, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Icicle Storm", "Swords Dance", "Sacred Sword", "Throat Chop"], - "abilities": ["Tablets of Ruin"], - "teraTypes": ["Fighting"] - } - ] - }, - "pelipper": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Weather Ball", "Bleakwind Storm", "Sandsear Storm", "Wildbolt Storm", "Springtide Storm", "U-turn"], - "abilities": ["Drizzle"], - "teraTypes": ["Ground", "Electric", "Fairy"] - }, - { - "role": "Bulky Attacker", - "movepool": ["Weather Ball", "Bleakwind Storm", "Sandsear Storm", "Wildbolt Storm", "Springtide Storm", "Roost"], - "abilities": ["Drizzle"], - "teraTypes": ["Grass"] - } - ] - }, - "kleavor": { - "level": 80, - "sets": [ - { - "role": "AV Pivot", - "movepool": ["Stone Axe", "X-Scissor", "U-turn", "Close Combat"], - "abilities": ["King of the Hill"], - "teraTypes": ["Fighting"] - }, - { - "role": "Fast Attacker", - "movepool": ["Stone Axe", "X-Scissor", "U-turn", "Close Combat"], - "abilities": ["King of the Hill"], - "teraTypes": ["Fighting"] - } - ] - }, - "araquanid": { - "level": 88, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Silk Trap", "Surging Strikes", "Flip Turn", "First Impression"], - "abilities": ["Water Bubble"], - "teraTypes": ["Water"] - } - ] - }, - "avalugghisui": { - "level": 82, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Rapid Spin", "Mountain Maw", "Mountain Gale", "Body Press", "Recover", "Stealth Rock"], - "abilities": ["Multiscale"], - "teraTypes": ["Ghost", "Fighting"] - } - ] - }, - "swalot": { - "level": 86, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Spit Up", "Swallow", "Toxic Spikes", "Earth Power"], - "abilities": ["Omnivore"], - "teraTypes": ["Dark"] - } - ] - }, - "zapdosgalar": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Thunderous Kick", "Knock Off", "U-turn", "Wild Charge"], - "abilities": ["Defiant"], - "teraTypes": ["Dark"] - } - ] - }, - "phione": { - "level": 90, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Geyser", "Tidal Surge", "Rest", "Work Up"], - "abilities": ["Hydration"], - "teraTypes": ["Grass"] - } - ] - }, - "sudowoodo": { - "level": 90, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Bonsai Bounce", "Earthquake", "Wood Hammer", "Head Smash"], - "abilities": ["Pseudowoodo"], - "teraTypes": ["Rock", "Grass"] - } - ] - }, - "dondozo": { - "level": 86, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Wave Crash", "Order Up", "Earthquake", "Horn Leech"], - "abilities": ["Unaware"], - "teraTypes": ["Dragon"] - }, - { - "role": "Bulky Attacker", - "movepool": ["Recover", "Fishious Rend", "Flip Turn", "Body Slam", "Body Press"], - "abilities": ["Unaware"], - "teraTypes": ["Grass"] - } - ] - }, - "golurk": { - "level": 88, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Trick Room", "Headlong Rush", "Shattered Seal", "Ice Punch", "Dynamic Punch"], - "abilities": ["Iron Fist"], - "teraTypes": ["Fighting", "Ground"] - } - ] - }, - "meowscarada": { - "level": 80, - "sets": [ - { - "role": "Fast Support", - "movepool": ["Flower Trick", "Spectral Thief", "Knock Off", "U-turn", "Encore", "Spikes", "Toxic Spikes"], - "abilities": ["Protean"], - "teraTypes": ["Ghost"] - } - ] - }, - "infernape": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["All-Out Assault", "Mind Blown", "Bitter Blade", "Grass Knot", "Gunk Shot", "Earthquake", "Vacuum Wave", "U-turn"], - "abilities": ["Berserk"], - "teraTypes": ["Fire", "Stellar"] - } - ] - }, - "salamence": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Blood Moon", "Hyper Voice", "Hydro Pump", "Fire Blast", "Roost", "Twister"], - "abilities": ["Aerilate"], - "teraTypes": ["Steel", "Flying"] - } - ] - }, - "salamencemega": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Dragon Ascent", "Dragon Claw", "Earthquake", "U-turn", "Dragon Dance"], - "abilities": ["Intimidate"], - "teraTypes": ["Normal"] - } - ] - }, - "urshifu": { - "level": 80, - "sets": [ - { - "role": "AV Pivot", - "movepool": ["Wicked Blow", "Close Combat", "Aqua Jet", "Sucker Punch", "U-turn"], - "abilities": ["Sniper"], - "teraTypes": ["Stellar"] - }, - { - "role": "Setup Sweeper", - "movepool": ["Wicked Blow", "Close Combat", "Aqua Jet", "Sucker Punch", "Swords Dance", "Agility"], - "abilities": ["Sniper"], - "teraTypes": ["Stellar"] - } - ] - }, - "urshifurapidstrike": { - "level": 80, - "sets": [ - { - "role": "AV Pivot", - "movepool": ["Surging Strikes", "Close Combat", "Aqua Jet", "Sucker Punch", "U-turn"], - "abilities": ["Sniper"], - "teraTypes": ["Stellar"] - }, - { - "role": "Setup Sweeper", - "movepool": ["Surging Strikes", "Close Combat", "Aqua Jet", "Sucker Punch", "Swords Dance", "Agility"], - "abilities": ["Sniper"], - "teraTypes": ["Stellar"] - } - ] - }, - "stonjourner": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Rock Wrecker", "Giga Impact", "Meteor Assault", "Sky Attack", "Solar Blade"], - "abilities": ["Power Spot"], - "teraTypes": ["Rock", "Grass", "Fighting"] - } - ] - }, - "veluza": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Waterfall", "Rage Fist", "Fillet Away", "Stored Power"], - "abilities": ["Mold Breaker"], - "teraTypes": ["Water", "Ghost", "Psychic", "Dark"] - } - ] - }, - "ogerponhearthflame": { - "level": 80, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Focus Energy", "Ivy Cudgel", "Stone Edge", "Leaf Blade", "Crabhammer"], - "abilities": ["Intimidate"], - "teraTypes": ["Fire"] - } - ] - }, - "dachsbun": { - "level": 84, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Nuzzle", "Body Press", "Spirit Break", "Morning Sun"], - "abilities": ["Well-Baked Body"], - "teraTypes": ["Steel"] - } - ] - }, - "mew": { - "level": 90, - "sets": [ - { - "role": "Fast Support", - "movepool": ["Acrobatics", "Air Slash", "Agility", "Avalanche"], - "abilities": ["Biogenesis"], - "teraTypes": ["Stellar"] - } - ] - }, - "magneton": { - "level": 90, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["Magnet Rise", "Thunderbolt", "Magnet Bomb", "Volt Switch", "Thunder Wave"], - "abilities": ["Magnet Pull"], - "teraTypes": ["Ghost", "Water"] - } - ] - }, - "delibird": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Icicle Storm", "Brave Bird", "Aerial Ace", "Drill Run"], - "abilities": ["Hail Mary"], - "teraTypes": ["Ice", "Ground"] - } - ] - }, - "hitmontop": { - "level": 88, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["Triple Axel", "Triple Kick", "Bulk Up", "Rapid Spin", "Bullet Seed"], - "abilities": ["Technician"], - "teraTypes": ["Ice"] - } - ] - }, - "articunogalar": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Freezing Glare", "Aeroblast", "Roost", "Calm Mind"], - "abilities": ["Brain Freeze"], - "teraTypes": ["Steel"] - }, - { - "role": "Fast Attacker", - "movepool": ["Freezing Glare", "Oblivion Wing", "Aura Sphere", "U-turn"], - "abilities": ["Brain Freeze"], - "teraTypes": ["Fighting", "Psychic"] - } - ] - }, - "vaporeon": { - "level": 88, - "sets": [ - { - "role": "Fast Support", - "movepool": ["Volt Switch", "Burn Out", "Recover", "Scald"], - "abilities": ["Marvel Scale"], - "teraTypes": ["Stellar"] - } - ] - }, - "garganacl": { - "level": 84, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Thunder Wave", "Salt Curse", "Purify", "Earthquake"], - "abilities": ["Purifying Salt"], - "teraTypes": ["Ghost"] - } - ] - }, - "swanna": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Steam Eruption", "Bleakwind Storm", "Roost", "Defog", "Fly-by"], - "abilities": ["Serene Grace"], - "teraTypes": ["Ground"] - } - ] - }, - "typhlosionmega": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Eruption", "Steam Eruption", "Matcha Gotcha", "Morning Sun"], - "abilities": ["Magic Guard"], - "teraTypes": ["Normal"] - }, - { - "role": "Bulky Setup", - "movepool": ["Heat Sink", "Steam Eruption", "Calm Mind", "Morning Sun"], - "abilities": ["Magic Guard"], - "teraTypes": ["Normal"] - } - ] - }, - "terapagos": { - "level": 82, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["Rest", "Sleep Talk", "Calm Mind", "Tera Starstorm"], - "abilities": ["Tera Shift"], - "teraTypes": ["Normal"] - }, - { - "role": "Setup Sweeper", - "movepool": ["Rapid Spin", "Nasty Plot", "Protect", "Tera Starstorm"], - "abilities": ["Tera Shift"], - "teraTypes": ["Normal"] - } - ] - }, - "flapple": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Dragon Dance", "Earthquake", "Grab Apple", "Flare Blitz"], - "abilities": ["Ripen"], - "teraTypes": ["Fire"] - } - ] - }, - "genesectburn": { - "level": 82, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Techno Blast", "Earthquake", "Sunsteel Strike", "U-turn"], - "abilities": ["Download"], - "teraTypes": ["Fire"] - } - ] - }, - "genesectchill": { - "level": 84, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Techno Blast", "Earthquake", "Behemoth Blade", "U-turn"], - "abilities": ["Download"], - "teraTypes": ["Ice"] - } - ] - }, - "genesectdouse": { - "level": 82, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Techno Blast", "Thunder", "Make It Rain", "U-turn"], - "abilities": ["Download"], - "teraTypes": ["Water"] - } - ] - }, - "genesectshock": { - "level": 80, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Techno Blast", "Ice Beam", "Tachyon Cutter", "U-turn"], - "abilities": ["Download"], - "teraTypes": ["Electric"] - } - ] - }, - "honchkrow": { - "level": 84, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["Crowverload", "Sucker Punch", "Oblivion Wing", "U-turn"], - "abilities": ["Supreme Overlord"], - "teraTypes": ["Dark"] - }, - { - "role": "Bulky Attacker", - "movepool": ["Crowverload", "Sucker Punch", "Oblivion Wing", "Close Combat"], - "abilities": ["Supreme Overlord"], - "teraTypes": ["Fighting"] - } - ] - }, - "primeape": { - "level": 84, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["Drain Punch", "Taunt", "Knock Off", "Iron Head", "Earthquake"], - "abilities": ["Battle Rage"], - "teraTypes": ["Steel"] - } - ] - }, - "rillaboom": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Nature's Fury", "Wood Hammer", "Land's Wrath", "U-turn"], - "abilities": ["Terrain Shift"], - "teraTypes": ["Stellar"] - } - ] - }, - "mandibuzz": { - "level": 84, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Fling", "Scavenge", "Bonemerang", "Roost"], - "abilities": ["Weak Armor"], - "teraTypes": ["Poison"] - } - ] - }, - "feraligatr": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Dragon Dance", "Thunder Fang", "Crunch", "Liquidation"], - "abilities": ["Sheer Force"], - "teraTypes": ["Dark"] - } - ] - }, - "feraligatrmega": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["Dragon Dance", "Thunder Fang", "Poison Fang", "Crunch", "Fire Fang"], - "abilities": ["Sheer Force"], - "teraTypes": ["Normal"] - } - ] - }, - "salazzle": { - "level": 84, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["Magma Storm", "Malignant Chain", "Venoshock", "Psychic Noise", "Baneful Bunker"], - "abilities": ["Corrosive Soul"], - "teraTypes": ["Flying"] - } - ] - }, - "kyogre": { - "level": 80, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["Origin Pulse", "Thunder", "Ice Beam", "Hurricane", "Tidal Surge"], - "abilities": ["Oceanic Blessing"], - "teraTypes": ["Water"] - } - ] - }, - "azelf": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Rapid Spin", "Metronome", "Loot Box", "Acupressure"], - "abilities": ["Auto Spin"], - "teraTypes": ["Stellar"] - } - ] - }, - "decidueye": { - "level": 84, - "sets": [ - { - "role": "Fast Support", - "movepool": ["Sinister Arrows", "Leaf Blade", "Defog", "Roost", "Spirit Shackle", "U-turn"], - "abilities": ["Overgrow", "Sniper"], - "teraTypes": ["Steel", "Dark", "Ghost"] - } - ] - }, - "ogerponcornerstone": { - "level": 84, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["Sappy Seed", "Ivy Cudgel", "Synthesis", "Spiky Shield", "Thousand Waves"], - "abilities": ["Solid Rock"], - "teraTypes": ["Rock"] - } - ] - }, - "glimmora": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Mortal Spin", "Meteor Beam", "Power Gem", "Ice Beam", "Malignant Chain"], - "abilities": ["Corrosion"], - "teraTypes": ["Grass"] - } - ] - }, - "wobbuffet": { - "level": 84, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["Counter", "Mirror Coat", "Shed Tail", "Encore", "Guillotine", "Night Shade"], - "abilities": ["Jello Body"], - "teraTypes": ["Dark", "Steel"] - } - ] - }, - "raticatemega": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["Super Fang", "Hyper Fang", "Last Breakfast", "U-turn"], - "abilities": ["Hustle"], - "teraTypes": ["Normal"] - } - ] - } -} +{ + "volcarona": { + "level": 84, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Whirlwind", "Fiery Dance", "Will-o-wisp", "Morning Sun"], + "abilities": ["Fluffy"], + "teraTypes": ["Water", "Steel"] + } + ] + }, + "golemalola": { + "level": 94, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Double-Edge", "Rock Polish", "Earthquake", "Stone Edge"], + "abilities": ["Galvanize"], + "teraTypes": ["Electric", "Grass"] + } + ] + }, + "lurantis": { + "level": 80, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Leaf Storm", "Power Whip", "Superpower", "Ice Hammer", "Synthesis"], + "abilities": ["Contrary"], + "teraTypes": ["Ice"] + } + ] + }, + "ironcrown": { + "level": 78, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Future Sight", "Volt Switch", "Tachyon Cutter", "King's Shield", "Stealth Rock", "Rest"], + "abilities": ["Queenly Majesty"], + "teraTypes": ["Water", "Steel"] + }, + { + "role": "Bulky Setup", + "movepool": ["Iron Defense", "Body Press", "Tachyon Cutter", "Rest", "Stealth Rock"], + "abilities": ["Battle Armor"], + "teraTypes": ["Fighting"] + } + ] + }, + "mamoswine": { + "level": 82, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Icicle Crash", "Ice Shard", "Earthquake", "Ancient Power"], + "abilities": ["Thick Fat"], + "teraTypes": ["Ice", "Ground"] + } + ] + }, + "ceruledge": { + "level": 82, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Bitter Blade", "Close Combat", "Poltergeist", "Shadow Sneak", "Swords Dance"], + "abilities": ["Weak Armor"], + "teraTypes": ["Fighting", "Fire", "Ghost"] + } + ] + }, + "carbink": { + "level": 84, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Iron Defense", "Body Press", "Moonblast", "Moonlight"], + "abilities": ["Magic Bounce"], + "teraTypes": ["Fighting"] + }, + { + "role": "Bulky Support", + "movepool": ["Volt Switch", "Moonlight", "Spikes", "Stealth Rock", "Body Press", "Moonblast"], + "abilities": ["Magic Bounce"], + "teraTypes": ["Steel"] + } + ] + }, + "moltres": { + "level": 78, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Brave Bird", "Flare Blitz", "Wood Hammer", "Wave Crash", "Defog", "U-Turn"], + "abilities": ["Magic Guard"], + "teraTypes": ["Grass"] + } + ] + }, + "kommoo": { + "level": 72, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Clangorous Soul", "Aura Sphere", "Close Combat", "Clanging Scales", "Boomburst"], + "abilities": ["Punk Rock"], + "teraTypes": ["Normal"] + } + ] + }, + "illumise": { + "level": 90, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Bug Buzz", "Quiver Dance", "Ice Beam", "Thunderbolt"], + "abilities": ["Call Volbeat"], + "teraTypes": ["Electric"] + } + ] + }, + "volbeat": { + "level": 90, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Victory Dance", "Lunge", "Mighty Cleave", "Earthquake"], + "abilities": ["Call Illumise"], + "teraTypes": ["Rock"] + } + ] + }, + "abomasnow": { + "level": 86, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Aurora Veil", "Blizzard", "Apple Acid", "Parting Shot"], + "abilities": ["Snow Warning"], + "teraTypes": ["Dragon"] + } + ] + }, + "abomasnowmega": { + "level": 86, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Glacial Lance", "Wood Hammer", "Earthquake", "Ice Shard", "Snowscape"], + "abilities": ["Snow Warning"], + "teraTypes": ["Grass"] + } + ] + }, + "dugtrio": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Sucker Punch", "Mighty Cleave", "Earthquake", "Salt Cure", "Acrobatics", "Swords Dance"], + "abilities": ["Arena Trap"], + "teraTypes": ["Flying", "Ground"] + }, + { + "role": "Fast Attacker", + "movepool": ["Sucker Punch", "Mighty Cleave", "Earthquake", "Tera Blast"], + "abilities": ["Arena Trap"], + "teraTypes": ["Flying"] + } + ] + }, + "altariamega": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Return", "Dragon Dance", "Earthquake", "Roost"], + "abilities": ["Fluffy"], + "teraTypes": ["Normal"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Beak Blast", "Roost", "Return", "Draco Meteor", "Explosion"], + "abilities": ["Fluffy"], + "teraTypes": ["Normal"] + } + ] + }, + "tyranitar": { + "level": 86, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Stone Axe", "Ceaseless Edge", "Kowtow Cleave", "Pursuit", "Switcheroo", "Accelerock", "Earthquake"], + "abilities": ["Sharpness"], + "teraTypes": ["Rock", "Dark", "Ghost"] + } + ] + }, + "tyranitarmega": { + "level": 82, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Sandsear Storm", "Power Gem", "Ice Beam", "Draco Meteor", "Dragon Pulse", "Mystical Power"], + "abilities": ["Sand Stream"], + "teraTypes": ["Rock"] + } + ] + }, + "mimikyu": { + "level": 86, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Spirit Shackle", "Play Rough", "Drain Punch", "Taunt", "Destiny Bond", "Obstruct", "U-turn", "Will-O-Wisp"], + "abilities": ["Disguise"], + "teraTypes": ["Dark"] + } + ] + }, + "mesprit": { + "level": 82, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Agility", "Psychic", "Stored Power", "Freeze-Dry", "Torch Song"], + "abilities": ["Liquid Voice"], + "teraTypes": ["Poison", "Water"] + }, + { + "role": "Bulky Setup", + "movepool": ["Cosmic Power", "Stored Power", "Torch Song", "Aqua Ring"], + "abilities": ["Liquid Voice"], + "teraTypes": ["Poison"] + } + ] + }, + "electrode": { + "level": 88, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Volt Switch", "Supercell Slam", "Double-Edge", "Encore", "Rapid Spin"], + "abilities": ["Short Fuse"], + "teraTypes": ["Electric", "Grass"] + } + ] + }, + "taurospaldeacombat": { + "level": 78, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Raging Bull", "Extreme Speed", "U-turn", "Knock Off"], + "abilities": ["Adaptability"], + "teraTypes": ["Normal"] + } + ] + }, + "chiyu": { + "level": 80, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Splash", "Triple Dive", "Pyro Ball", "Sucker Punch", "Knock Off"], + "abilities": ["Water Absorb"], + "teraTypes": ["Water", "Fire"] + } + ] + }, + "wochien": { + "level": 82, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Leech Seed", "Strength Sap", "Giga Drain", "Ruination", "Ingrain", "Parting Shot", "Bouncy Bubble"], + "abilities": ["Liquid Ooze"], + "teraTypes": ["Steel"] + } + ] + }, + "staraptor": { + "level": 88, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Brave Bird", "Jump Kick", "U-turn", "Head Smash", "Wave Crash", "Flare Blitz"], + "abilities": ["Reckless"], + "teraTypes": ["Fighting"] + } + ] + }, + "archaludon": { + "level": 78, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Electro Shot", "Flash Cannon", "Hydro Pump", "Scald", "Draco Meteor"], + "abilities": ["Hydroelectric Dam"], + "teraTypes": ["Water", "Electric"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Body Press", "Draco Meteor", "Flash Cannon", "Stealth Rock", "Scald", "Thunderbolt"], + "abilities": ["Stamina"], + "teraTypes": ["Fighting", "Flying", "Fairy"] + } + ] + }, + "malamar": { + "level": 94, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Will-O-Wisp", "Recover", "Knock Off", "Psychic Noise", "Eerie Spell", "Spirit Break", "Sweet Kiss"], + "abilities": ["Flip Flop"], + "teraTypes": ["Steel"] + } + ] + }, + "empoleon": { + "level": 82, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Nasty Plot", "Tachyon Cutter", "Air Slash", "Secret Sword", "Roost"], + "abilities": ["Sharpness"], + "teraTypes": ["Steel", "Ground"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Nasty Plot", "Tachyon Cutter", "Air Slash", "Water Shuriken"], + "abilities": ["Sharpness"], + "teraTypes": ["Steel", "Ground"] + } + ] + }, + "glastrier": { + "level": 82, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Swords Dance", "Close Combat", "Icicle Crash", "High Horsepower", "Heavy Slam"], + "abilities": ["Frozen Armor"], + "teraTypes": ["Water"] + }, + { + "role": "AV Pivot", + "movepool": ["Close Combat", "Icicle Crash", "High Horsepower", "Heavy Slam"], + "abilities": ["Frozen Armor"], + "teraTypes": ["Water"] + } + ] + }, + "regieleki": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Explosion", "Extreme Speed", "Volt Switch", "Rapid Spin", "Soak"], + "abilities": ["Galvanize"], + "teraTypes": ["Electric"] + } + ] + }, + "lycanrocmidnight": { + "level": 88, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Swords Dance", "Bone Rush", "Storm Throw", "Rock Blast", "Accelerock"], + "abilities": ["Technician"], + "teraTypes": ["Rock", "Flying", "Fighting"] + } + ] + }, + "lycanroc": { + "level": 92, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Stone Edge", "Fire Lash", "U-turn", "Spikes", "Close Combat", "Stealth Rock", "Accelerock"], + "abilities": ["Drought"], + "teraTypes": ["Water", "Fire"] + } + ] + }, + "lycanrocdusk": { + "level": 86, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Mountain Maw", "Crunch", "Fire Fang", "Ice Fang", "Thunder Fang", "Psychic Fangs"], + "abilities": ["Strong Jaw"], + "teraTypes": ["Rock"] + } + ] + }, + "dodrio": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Triple Arrows", "Brave Bird", "Knock Off", "Obstruct"], + "abilities": ["Speed Boost"], + "teraTypes": ["Fighting"] + }, + { + "role": "Wallbreaker", + "movepool": ["Triple Arrows", "Drill Peck", "Knock Off", "Obstruct"], + "abilities": ["Speed Boost"], + "teraTypes": ["Fighting"] + } + ] + }, + "whiscash": { + "level": 88, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Stealth Rock", "Spikes", "Flip Turn", "Scald", "Earthquake", "Toxic"], + "abilities": ["Regenerator"], + "teraTypes": ["Poison"] + } + ] + }, + "hippowdon": { + "level": 86, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Stealth Rock", "Salt Cure", "Sand Tomb", "Slack Off"], + "abilities": ["Earth Eater"], + "teraTypes": ["Steel"] + } + ] + }, + "cramorant": { + "level": 84, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Defog", "Roost", "Beak Blast", "Surf"], + "abilities": ["Gulp Missile"], + "teraTypes": ["Ground", "Dragon"] + } + ] + }, + "grafaiai": { + "level": 88, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Acrobatics", "Bulk Up", "Double-Edge", "Drain Punch", "Scavenge"], + "abilities": ["Unburden"], + "teraTypes": ["Fighting", "Flying"] + } + ] + }, + "tatsugiri": { + "level": 84, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Switcheroo", "Sashimi Shuffle", "Twister", "Water Spout"], + "abilities": ["Regenerator"], + "teraTypes": ["Water"] + } + ] + }, + "kyurem": { + "level": 78, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Scale Shot", "Icicle Spear", "Earthquake"], + "abilities": ["Skill Link"], + "teraTypes": ["Dragon"] + } + ] + }, + "roaringmoon": { + "level": 80, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["U-turn", "Jaw Lock", "Glaive Rush", "Fire Lash", "Roost"], + "abilities": ["Shadow Shield"], + "teraTypes": ["Fire", "Poison"] + } + ] + }, + "milotic": { + "level": 80, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Bouncy Bubble", "Recover", "Haze", "Moonblast"], + "abilities": ["Aqua Veil"], + "teraTypes": ["Grass"] + } + ] + }, + "gogoat": { + "level": 90, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Milk Drink", "Horn Leech", "Head Smash", "High Horsepower", "Grassy Glide"], + "abilities": ["Grass Pelt"], + "teraTypes": ["Water"] + } + ] + }, + "clodsire": { + "level": 86, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Barb Barrage", "Earthquake", "Recover", "Spikes", "Stealth Rock", "Toxic Spikes"], + "abilities": ["Still Water"], + "teraTypes": ["Flying", "Dark"] + } + ] + }, + "masquerain": { + "level": 86, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Sticky Web", "Hurricane", "Bug Buzz", "U-turn", "Roost"], + "abilities": ["Intimidate"], + "teraTypes": ["Ground"] + } + ] + }, + "masquerainmega": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Quiver Dance", "Weather Ball", "Bug Buzz", "Dark Pulse", "Hurricane", "Ice Beam"], + "abilities": ["Intimidate"], + "teraTypes": ["Normal"] + } + ] + }, + "kyuremblack": { + "level": 80, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Fusion Bolt", "Ice Hammer", "Dragon Hammer", "Earthquake", "Rock Slide", "Roost"], + "abilities": ["Teravolt"], + "teraTypes": ["Ice"] + } + ] + }, + "ironthorns": { + "level": 92, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Sand Tomb", "Stealth Rock", "Iron Strike", "Knock Off"], + "abilities": ["Iron Barbs"], + "teraTypes": ["Steel"] + } + ] + }, + "dudunsparce": { + "level": 86, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Stomping Tantrum", "Boomburst", "Stealth Rock", "Roost", "Glare"], + "abilities": ["Earth Eater"], + "teraTypes": ["Poison"] + } + ] + }, + "chienpao": { + "level": 82, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Icicle Storm", "Swords Dance", "Sacred Sword", "Throat Chop"], + "abilities": ["Tablets of Ruin"], + "teraTypes": ["Fighting"] + } + ] + }, + "pelipper": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Weather Ball", "Bleakwind Storm", "Sandsear Storm", "Wildbolt Storm", "Springtide Storm", "U-turn"], + "abilities": ["Drizzle"], + "teraTypes": ["Ground", "Electric", "Fairy"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Weather Ball", "Bleakwind Storm", "Sandsear Storm", "Wildbolt Storm", "Springtide Storm", "Roost"], + "abilities": ["Drizzle"], + "teraTypes": ["Grass"] + } + ] + }, + "kleavor": { + "level": 80, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Stone Axe", "X-Scissor", "U-turn", "Close Combat"], + "abilities": ["King of the Hill"], + "teraTypes": ["Fighting"] + }, + { + "role": "Fast Attacker", + "movepool": ["Stone Axe", "X-Scissor", "U-turn", "Close Combat"], + "abilities": ["King of the Hill"], + "teraTypes": ["Fighting"] + } + ] + }, + "araquanid": { + "level": 88, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Silk Trap", "Surging Strikes", "Flip Turn", "First Impression"], + "abilities": ["Water Bubble"], + "teraTypes": ["Water"] + } + ] + }, + "avalugghisui": { + "level": 82, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Rapid Spin", "Mountain Maw", "Mountain Gale", "Body Press", "Recover", "Stealth Rock"], + "abilities": ["Multiscale"], + "teraTypes": ["Ghost", "Fighting"] + } + ] + }, + "swalot": { + "level": 86, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Spit Up", "Swallow", "Toxic Spikes", "Earth Power"], + "abilities": ["Omnivore"], + "teraTypes": ["Dark"] + } + ] + }, + "zapdosgalar": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Thunderous Kick", "Knock Off", "U-turn", "Wild Charge"], + "abilities": ["Defiant"], + "teraTypes": ["Dark"] + } + ] + }, + "phione": { + "level": 90, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Geyser", "Tidal Surge", "Rest", "Work Up"], + "abilities": ["Hydration"], + "teraTypes": ["Grass"] + } + ] + }, + "sudowoodo": { + "level": 90, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Bonsai Bounce", "Earthquake", "Wood Hammer", "Head Smash"], + "abilities": ["Pseudowoodo"], + "teraTypes": ["Rock", "Grass"] + } + ] + }, + "dondozo": { + "level": 86, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Wave Crash", "Order Up", "Earthquake", "Horn Leech"], + "abilities": ["Unaware"], + "teraTypes": ["Dragon"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Recover", "Fishious Rend", "Flip Turn", "Body Slam", "Body Press"], + "abilities": ["Unaware"], + "teraTypes": ["Grass"] + } + ] + }, + "golurk": { + "level": 88, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Trick Room", "Headlong Rush", "Shattered Seal", "Ice Punch", "Dynamic Punch"], + "abilities": ["Iron Fist"], + "teraTypes": ["Fighting", "Ground"] + } + ] + }, + "meowscarada": { + "level": 80, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Flower Trick", "Spectral Thief", "Knock Off", "U-turn", "Encore", "Spikes", "Toxic Spikes"], + "abilities": ["Protean"], + "teraTypes": ["Ghost"] + } + ] + }, + "infernape": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["All-Out Assault", "Mind Blown", "Bitter Blade", "Grass Knot", "Gunk Shot", "Earthquake", "Vacuum Wave", "U-turn"], + "abilities": ["Berserk"], + "teraTypes": ["Fire", "Stellar"] + } + ] + }, + "salamence": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Blood Moon", "Hyper Voice", "Hydro Pump", "Fire Blast", "Roost", "Twister"], + "abilities": ["Aerilate"], + "teraTypes": ["Steel", "Flying"] + } + ] + }, + "salamencemega": { + "level": 80, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Dragon Ascent", "Dragon Claw", "Earthquake", "U-turn", "Dragon Dance"], + "abilities": ["Intimidate"], + "teraTypes": ["Normal"] + } + ] + }, + "urshifu": { + "level": 80, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Wicked Blow", "Close Combat", "Aqua Jet", "Sucker Punch", "U-turn"], + "abilities": ["Sniper"], + "teraTypes": ["Stellar"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Wicked Blow", "Close Combat", "Aqua Jet", "Sucker Punch", "Swords Dance", "Agility"], + "abilities": ["Sniper"], + "teraTypes": ["Stellar"] + } + ] + }, + "urshifurapidstrike": { + "level": 80, + "sets": [ + { + "role": "AV Pivot", + "movepool": ["Surging Strikes", "Close Combat", "Aqua Jet", "Sucker Punch", "U-turn"], + "abilities": ["Sniper"], + "teraTypes": ["Stellar"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Surging Strikes", "Close Combat", "Aqua Jet", "Sucker Punch", "Swords Dance", "Agility"], + "abilities": ["Sniper"], + "teraTypes": ["Stellar"] + } + ] + }, + "stonjourner": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Rock Wrecker", "Giga Impact", "Meteor Assault", "Sky Attack", "Solar Blade"], + "abilities": ["Power Spot"], + "teraTypes": ["Rock", "Grass", "Fighting"] + } + ] + }, + "veluza": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Waterfall", "Rage Fist", "Fillet Away", "Stored Power"], + "abilities": ["Mold Breaker"], + "teraTypes": ["Water", "Ghost", "Psychic", "Dark"] + } + ] + }, + "ogerponhearthflame": { + "level": 80, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Focus Energy", "Ivy Cudgel", "Stone Edge", "Leaf Blade", "Crabhammer"], + "abilities": ["Intimidate"], + "teraTypes": ["Fire"] + } + ] + }, + "dachsbun": { + "level": 84, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Nuzzle", "Body Press", "Spirit Break", "Morning Sun"], + "abilities": ["Well-Baked Body"], + "teraTypes": ["Steel"] + } + ] + }, + "mew": { + "level": 90, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Acrobatics", "Air Slash", "Agility", "Avalanche"], + "abilities": ["Biogenesis"], + "teraTypes": ["Stellar"] + } + ] + }, + "magneton": { + "level": 90, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Magnet Rise", "Thunderbolt", "Magnet Bomb", "Volt Switch", "Thunder Wave"], + "abilities": ["Magnet Pull"], + "teraTypes": ["Ghost", "Water"] + } + ] + }, + "delibird": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Icicle Storm", "Brave Bird", "Aerial Ace", "Drill Run"], + "abilities": ["Hail Mary"], + "teraTypes": ["Ice", "Ground"] + } + ] + }, + "hitmontop": { + "level": 88, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Triple Axel", "Triple Kick", "Bulk Up", "Rapid Spin", "Bullet Seed"], + "abilities": ["Technician"], + "teraTypes": ["Ice"] + } + ] + }, + "articunogalar": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Freezing Glare", "Aeroblast", "Roost", "Calm Mind"], + "abilities": ["Brain Freeze"], + "teraTypes": ["Steel"] + }, + { + "role": "Fast Attacker", + "movepool": ["Freezing Glare", "Oblivion Wing", "Aura Sphere", "U-turn"], + "abilities": ["Brain Freeze"], + "teraTypes": ["Fighting", "Psychic"] + } + ] + }, + "vaporeon": { + "level": 88, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Volt Switch", "Burn Out", "Recover", "Scald"], + "abilities": ["Marvel Scale"], + "teraTypes": ["Stellar"] + } + ] + }, + "garganacl": { + "level": 84, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Thunder Wave", "Salt Curse", "Purify", "Earthquake"], + "abilities": ["Purifying Salt"], + "teraTypes": ["Ghost"] + } + ] + }, + "swanna": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Steam Eruption", "Bleakwind Storm", "Roost", "Defog", "Fly-by"], + "abilities": ["Serene Grace"], + "teraTypes": ["Ground"] + } + ] + }, + "typhlosionmega": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Eruption", "Steam Eruption", "Matcha Gotcha", "Morning Sun"], + "abilities": ["Magic Guard"], + "teraTypes": ["Normal"] + }, + { + "role": "Bulky Setup", + "movepool": ["Heat Sink", "Steam Eruption", "Calm Mind", "Morning Sun"], + "abilities": ["Magic Guard"], + "teraTypes": ["Normal"] + } + ] + }, + "terapagos": { + "level": 82, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["Rest", "Sleep Talk", "Calm Mind", "Tera Starstorm"], + "abilities": ["Tera Shift"], + "teraTypes": ["Normal"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Rapid Spin", "Nasty Plot", "Protect", "Tera Starstorm"], + "abilities": ["Tera Shift"], + "teraTypes": ["Normal"] + } + ] + }, + "flapple": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Earthquake", "Grab Apple", "Flare Blitz"], + "abilities": ["Ripen"], + "teraTypes": ["Fire"] + } + ] + }, + "genesectburn": { + "level": 82, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Techno Blast", "Earthquake", "Sunsteel Strike", "U-turn"], + "abilities": ["Download"], + "teraTypes": ["Fire"] + } + ] + }, + "genesectchill": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Techno Blast", "Earthquake", "Behemoth Blade", "U-turn"], + "abilities": ["Download"], + "teraTypes": ["Ice"] + } + ] + }, + "genesectdouse": { + "level": 82, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Techno Blast", "Thunder", "Make It Rain", "U-turn"], + "abilities": ["Download"], + "teraTypes": ["Water"] + } + ] + }, + "genesectshock": { + "level": 80, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Techno Blast", "Ice Beam", "Tachyon Cutter", "U-turn"], + "abilities": ["Download"], + "teraTypes": ["Electric"] + } + ] + }, + "honchkrow": { + "level": 84, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Crowverload", "Sucker Punch", "Oblivion Wing", "U-turn"], + "abilities": ["Supreme Overlord"], + "teraTypes": ["Dark"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Crowverload", "Sucker Punch", "Oblivion Wing", "Close Combat"], + "abilities": ["Supreme Overlord"], + "teraTypes": ["Fighting"] + } + ] + }, + "primeape": { + "level": 84, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Drain Punch", "Taunt", "Knock Off", "Iron Head", "Earthquake"], + "abilities": ["Battle Rage"], + "teraTypes": ["Steel"] + } + ] + }, + "rillaboom": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Nature's Fury", "Wood Hammer", "Land's Wrath", "U-turn"], + "abilities": ["Terrain Shift"], + "teraTypes": ["Stellar"] + } + ] + }, + "mandibuzz": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Fling", "Scavenge", "Bonemerang", "Roost"], + "abilities": ["Weak Armor"], + "teraTypes": ["Poison"] + } + ] + }, + "feraligatr": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Thunder Fang", "Crunch", "Liquidation"], + "abilities": ["Sheer Force"], + "teraTypes": ["Dark"] + } + ] + }, + "feraligatrmega": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Thunder Fang", "Poison Fang", "Crunch", "Fire Fang"], + "abilities": ["Sheer Force"], + "teraTypes": ["Normal"] + } + ] + }, + "salazzle": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Magma Storm", "Malignant Chain", "Venoshock", "Psychic Noise", "Baneful Bunker"], + "abilities": ["Corrosive Soul"], + "teraTypes": ["Flying"] + } + ] + }, + "kyogre": { + "level": 80, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Origin Pulse", "Thunder", "Ice Beam", "Hurricane", "Tidal Surge"], + "abilities": ["Oceanic Blessing"], + "teraTypes": ["Water"] + } + ] + }, + "azelf": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Rapid Spin", "Metronome", "Loot Box", "Acupressure"], + "abilities": ["Auto Spin"], + "teraTypes": ["Stellar"] + } + ] + }, + "decidueye": { + "level": 84, + "sets": [ + { + "role": "Fast Support", + "movepool": ["Sinister Arrows", "Leaf Blade", "Defog", "Roost", "Spirit Shackle", "U-turn"], + "abilities": ["Overgrow", "Sniper"], + "teraTypes": ["Steel", "Dark", "Ghost"] + } + ] + }, + "ogerponcornerstone": { + "level": 84, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Sappy Seed", "Ivy Cudgel", "Synthesis", "Spiky Shield", "Thousand Waves"], + "abilities": ["Solid Rock"], + "teraTypes": ["Rock"] + } + ] + }, + "glimmora": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Mortal Spin", "Meteor Beam", "Power Gem", "Ice Beam", "Malignant Chain"], + "abilities": ["Corrosion"], + "teraTypes": ["Grass"] + } + ] + }, + "wobbuffet": { + "level": 84, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Counter", "Mirror Coat", "Shed Tail", "Encore", "Guillotine", "Night Shade"], + "abilities": ["Jello Body"], + "teraTypes": ["Dark", "Steel"] + } + ] + }, + "raticatemega": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Super Fang", "Hyper Fang", "Last Breakfast", "U-turn"], + "abilities": ["Hustle"], + "teraTypes": ["Normal"] + } + ] + } +} diff --git a/data/random-battles/chatbats/teams.ts b/data/random-battles/chatbats/teams.ts index fa7f264372..43bd15b268 100644 --- a/data/random-battles/chatbats/teams.ts +++ b/data/random-battles/chatbats/teams.ts @@ -1,1111 +1,1111 @@ -import { RandomTeams, type MoveCounter } from "../gen9/teams"; - -// Moves that restore HP: -const RECOVERY_MOVES = [ - 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis', -]; -// Moves that boost Attack: -const PHYSICAL_SETUP = [ - 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance', - 'filletaway', -]; -// Moves which boost Special Attack: -const SPECIAL_SETUP = [ - 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'takeheart', 'torchsong', 'filletaway', -]; -// Some moves that only boost Speed: -const SPEED_SETUP = [ - 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'trailblaze', -]; -// Conglomerate for ease of access -const SETUP = [ - 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance', - 'filletaway', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance', - 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'trickroom', 'workup', 'victorydance', -]; -const SPEED_CONTROL = [ - 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom', -]; -// Hazard-setting moves -const HAZARDS = [ - 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes', -]; -// Protect and its variants -const PROTECT_MOVES = [ - 'banefulbunker', 'burningbulwark', 'protect', 'silktrap', 'spikyshield', -]; -// Moves that switch the user out -const PIVOT_MOVES = [ - 'chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch', -]; - -// Moves that should be paired together when possible -const MOVE_PAIRS = [ - ['lightscreen', 'reflect'], - ['sleeptalk', 'rest'], - ['protect', 'wish'], - ['leechseed', 'protect'], - ['leechseed', 'substitute'], - ['leechseed', 'burningbulwark'], -]; - -/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */ -const PRIORITY_POKEMON = [ - 'breloom', 'brutebonnet', 'cacturne', 'honchkrow', 'mimikyu', 'ragingbolt', 'scizor', -]; - -/** Pokemon who should never be in the lead slot */ -const NO_LEAD_POKEMON = [ - 'Zacian', 'Zamazenta', -]; -const DOUBLES_NO_LEAD_POKEMON = [ - 'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta', -]; -export class RandomChatBatsTeams extends RandomTeams { - override cullMovePool( - types: string[], - moves: Set, - abilities: string[], - counter: MoveCounter, - movePool: string[], - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species, - isLead: boolean, - isDoubles: boolean, - teraType: string, - role: RandomTeamsTypes.Role, - ): void { - if (moves.size + movePool.length <= this.maxMoveCount) return; - // If we have two unfilled moves and only one unpaired move, cull the unpaired move. - if (moves.size === this.maxMoveCount - 2) { - const unpairedMoves = [...movePool]; - for (const pair of MOVE_PAIRS) { - if (movePool.includes(pair[0]) && movePool.includes(pair[1])) { - this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0])); - this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1])); - } - } - if (unpairedMoves.length === 1) { - this.fastPop(movePool, movePool.indexOf(unpairedMoves[0])); - } - } - - // These moves are paired, and shouldn't appear if there is not room for them both. - if (moves.size === this.maxMoveCount - 1) { - for (const pair of MOVE_PAIRS) { - if (movePool.includes(pair[0]) && movePool.includes(pair[1])) { - this.fastPop(movePool, movePool.indexOf(pair[0])); - this.fastPop(movePool, movePool.indexOf(pair[1])); - } - } - } - - // Develop additional move lists - const statusMoves = this.cachedStatusMoves; - - // Team-based move culls - if (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) { - if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect')); - if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen')); - if (moves.size + movePool.length <= this.maxMoveCount) return; - } - if (teamDetails.stickyWeb) { - if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb')); - if (moves.size + movePool.length <= this.maxMoveCount) return; - } - if (teamDetails.stealthRock) { - if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock')); - if (moves.size + movePool.length <= this.maxMoveCount) return; - } - if (teamDetails.defog || teamDetails.rapidSpin) { - if (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog')); - if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin')); - if (moves.size + movePool.length <= this.maxMoveCount) return; - } - if (teamDetails.toxicSpikes) { - if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes')); - if (moves.size + movePool.length <= this.maxMoveCount) return; - } - if (teamDetails.spikes && teamDetails.spikes >= 2) { - if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes')); - if (moves.size + movePool.length <= this.maxMoveCount) return; - } - if (teamDetails.statusCure) { - if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell')); - if (moves.size + movePool.length <= this.maxMoveCount) return; - } - - if (isDoubles) { - const doublesIncompatiblePairs = [ - // In order of decreasing generalizability - [SPEED_CONTROL, SPEED_CONTROL], - [HAZARDS, HAZARDS], - [PROTECT_MOVES, PROTECT_MOVES], - ['rockslide', 'stoneedge'], - [SETUP, ['fakeout', 'helpinghand']], - [PROTECT_MOVES, 'wideguard'], - [['fierydance', 'fireblast'], 'heatwave'], - ['dazzlinggleam', ['fleurcannon', 'moonblast']], - ['poisongas', ['toxicspikes', 'willowisp']], - [RECOVERY_MOVES, 'healpulse'], - ['lifedew', 'healpulse'], - ['haze', 'icywind'], - [['hydropump', 'muddywater'], ['muddywater', 'scald']], - ['disable', 'encore'], - ['freezedry', 'icebeam'], - ['energyball', 'leafstorm'], - ['wildcharge', 'thunderbolt'], - ['earthpower', 'sandsearstorm'], - ['coaching', ['helpinghand', 'howl']], - ]; - - for (const pair of doublesIncompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); - - if (role !== 'Offensive Protect') this.incompatibleMoves(moves, movePool, PROTECT_MOVES, ['flipturn', 'uturn']); - } - - // General incompatibilities - const incompatiblePairs = [ - // These moves don't mesh well with other aspects of the set - [statusMoves, ['healingwish', 'switcheroo', 'trick']], - [SETUP, PIVOT_MOVES], - [SETUP, HAZARDS], - [SETUP, ['defog', 'nuzzle', 'toxic', 'yawn', 'haze']], - [PHYSICAL_SETUP, PHYSICAL_SETUP], - [SPECIAL_SETUP, 'thunderwave'], - ['substitute', PIVOT_MOVES], - [SPEED_SETUP, ['aquajet', 'rest', 'trickroom']], - ['curse', ['irondefense', 'rapidspin']], - ['dragondance', 'dracometeor'], - - // These attacks are redundant with each other - ['surf', 'hydropump'], - ['liquidation', 'wavecrash'], - ['aquajet', 'flipturn'], - ['gigadrain', 'leafstorm'], - ['powerwhip', 'hornleech'], - [['airslash', 'bravebird', 'hurricane'], ['airslash', 'bravebird', 'hurricane']], - ['knockoff', 'foulplay'], - ['throatchop', ['crunch', 'lashout']], - ['doubleedge', ['bodyslam', 'headbutt']], - ['fireblast', ['fierydance', 'flamethrower']], - ['lavaplume', 'magmastorm'], - ['thunderpunch', 'wildcharge'], - [['thunderbolt', 'discharge', 'thunder'], ['thunderbolt', 'discharge', 'thunder']], - ['gunkshot', ['direclaw', 'poisonjab', 'sludgebomb']], - ['aurasphere', 'focusblast'], - ['closecombat', 'drainpunch'], - ['bugbite', 'pounce'], - [['dragonpulse', 'spacialrend'], 'dracometeor'], - ['heavyslam', 'flashcannon'], - ['alluringvoice', 'dazzlinggleam'], - - // These status moves are redundant with each other - ['taunt', 'disable'], - [['thunderwave', 'toxic'], ['thunderwave', 'willowisp']], - [['thunderwave', 'toxic', 'willowisp'], 'toxicspikes'], - ]; - - for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); - - if (!types.includes('Ice')) this.incompatibleMoves(moves, movePool, 'icebeam', 'icywind'); - - if (!isDoubles) this.incompatibleMoves(moves, movePool, ['taunt', 'strengthsap'], 'encore'); - - if (!types.includes('Dark') && teraType !== 'Dark') this.incompatibleMoves(moves, movePool, 'knockoff', 'suckerpunch'); - - if (!abilities.includes('Prankster')) this.incompatibleMoves(moves, movePool, 'thunderwave', 'yawn'); - - // This space reserved for assorted hardcodes that otherwise make little sense out of context - if (species.id === 'lurantis') this.incompatibleMoves(moves, movePool, 'leafstorm', 'powerwhip'); - if (species.id === 'ironcrown') this.incompatibleMoves(moves, movePool, 'kingsshield', 'stealthrock'); - if (species.id === 'ironcrown') this.incompatibleMoves(moves, movePool, 'kingsshield', 'rest'); - if (species.id === 'ironcrown') this.incompatibleMoves(moves, movePool, 'rest', 'stealthrock'); - if (species.id === 'carbink') this.incompatibleMoves(moves, movePool, 'spikes', 'stealthrock'); - if (species.id === 'moltres') this.incompatibleMoves(moves, movePool, 'bravebird', 'woodhammer'); - if (species.id === 'moltres') this.incompatibleMoves(moves, movePool, 'flareblitz', 'wavecrash'); - if (species.id === 'kommoo') this.incompatibleMoves(moves, movePool, 'aurasphere', 'closecombat'); - if (species.id === 'archaludon') this.incompatibleMoves(moves, movePool, 'scald', 'hydropump'); - if (species.id === 'abomasnowmega') this.incompatibleMoves(moves, movePool, 'iceshard', 'snowscape'); - if (species.id === 'regieleki') this.incompatibleMoves(moves, movePool, 'blazingtorque', 'soak'); - if (species.id === 'golurk') this.incompatibleMoves(moves, movePool, 'icepunch', 'dynamicpunch'); - if (species.id === 'ogerponhearthflame') this.incompatibleMoves(moves, movePool, 'crabhammer', 'stoneedge'); - if (species.id === 'hitmontop') this.incompatibleMoves(moves, movePool, 'bulkup', 'rapidspin'); - if (species.id === 'mesprit') this.incompatibleMoves(moves, movePool, 'psychic', 'storedpower'); - if (species.id === 'primeape') this.incompatibleMoves(moves, movePool, 'knockoff', 'earthquake'); - if (species.id === 'feraligatrmega') this.incompatibleMoves(moves, movePool, 'thunderfang', 'poisonfang'); - if (species.id === 'salazzle') this.incompatibleMoves(moves, movePool, 'malignantchain', 'venoshock'); - if (species.id === 'glimmora') this.incompatibleMoves(moves, movePool, 'powergem', 'meteorbeam'); - if (species.id === 'wobbuffet') this.incompatibleMoves(moves, movePool, 'shedtail', 'encore'); - if (species.id === 'wobbuffet') this.incompatibleMoves(moves, movePool, 'nightshade', 'guillotine'); - } - - override randomMoveset( - types: string[], - abilities: string[], - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species, - isLead: boolean, - isDoubles: boolean, - movePool: string[], - teraType: string, - role: RandomTeamsTypes.Role, - ): Set { - const moves = new Set(); - let counter = this.queryMoves(moves, species, teraType, abilities); - this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role); - - // If there are only four moves, add all moves and return early - if (movePool.length <= this.maxMoveCount) { - for (const moveid of movePool) { - moves.add(moveid); - } - return moves; - } - - const runEnforcementChecker = (checkerName: string) => { - if (!this.moveEnforcementCheckers[checkerName]) return false; - return this.moveEnforcementCheckers[checkerName]( - movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role - ); - }; - - if (role === 'Tera Blast user') { - counter = this.addMove('terablast', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - // Add required move (e.g. Relic Song for Meloetta-P) - if (species.requiredMove) { - const move = this.dex.moves.get(species.requiredMove).id; - counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - - // Add other moves you really want to have, e.g. STAB, recovery, setup. - - // PMCM hardcodes (reserve these to when absolutely necessary, let the script do most of the work) - // forces Splash on Chi-Yu's moveset, since it uses Z-Splash - if (species.id === 'chiyu') { - if (movePool.includes('splash')) { - counter = this.addMove('splash', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - // enforces both primary stabs on Infernape - if (species.id === 'infernape' && movePool.includes('mindblown')) { - counter = this.addMove('mindblown', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - counter = this.addMove('alloutassault', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - - // Enforce Facade if Guts is a possible ability - if (movePool.includes('facade') && abilities.includes('Guts')) { - counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - - // Enforce Night Shade, Revelation Dance, Revival Blessing, and Sticky Web - for (const moveid of ['nightshade', 'revelationdance', 'revivalblessing', 'stickyweb']) { - if (movePool.includes(moveid)) { - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce Trick Room on Doubles Wallbreaker - if (movePool.includes('trickroom') && role === 'Doubles Wallbreaker') { - counter = this.addMove('trickroom', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - - // Enforce hazard removal on Bulky Support if the team doesn't already have it - if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) { - if (movePool.includes('rapidspin')) { - counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - if (movePool.includes('defog')) { - counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce Knock Off on pure Normal- and Fighting-types in singles - if (!isDoubles && types.length === 1 && (types.includes('Normal') || types.includes('Fighting'))) { - if (movePool.includes('knockoff')) { - counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce Flip Turn on pure Water-type Wallbreakers - if (types.length === 1 && types.includes('Water') && - role === 'Wallbreaker' && movePool.includes('flipturn')) { - counter = this.addMove('flipturn', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - - // Enforce Spore on Smeargle - if (species.id === 'smeargle') { - if (movePool.includes('spore')) { - counter = this.addMove('spore', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce moves in doubles - if (isDoubles) { - const doublesEnforcedMoves = ['auroraveil', 'mortalspin', 'spore']; - for (const moveid of doublesEnforcedMoves) { - if (movePool.includes(moveid)) { - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - // Enforce Fake Out on slow Pokemon - if (movePool.includes('fakeout') && species.baseStats.spe <= 50) { - counter = this.addMove('fakeout', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - // Enforce Tailwind on Prankster and Gale Wings users - if (movePool.includes('tailwind') && (abilities.includes('Prankster') || abilities.includes('Gale Wings'))) { - counter = this.addMove('tailwind', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - // Enforce Thunder Wave on Prankster users as well - if (movePool.includes('thunderwave') && abilities.includes('Prankster')) { - counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce STAB priority - if ( - ['Bulky Attacker', 'Bulky Setup', 'Wallbreaker', 'Doubles Wallbreaker'].includes(role) || - PRIORITY_POKEMON.includes(species.id) - ) { - const priorityMoves = []; - for (const moveid of movePool) { - const move = this.dex.moves.get(moveid); - const moveType = this.getMoveType(move, species, abilities, teraType); - if ( - types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) && - (move.basePower || move.basePowerCallback) - ) { - priorityMoves.push(moveid); - } - } - if (priorityMoves.length) { - const moveid = this.sample(priorityMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce a single STAB for Moltres - if (species.id === 'moltres') { - const typeToEnforce = this.randomChance(1, 2) ? 'Fire' : 'Flying'; - - const stabMoves = []; - for (const moveid of movePool) { - const move = this.dex.moves.get(moveid); - const moveType = this.getMoveType(move, species, abilities, teraType); - if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && typeToEnforce === moveType) { - stabMoves.push(moveid); - } - } - while (runEnforcementChecker(typeToEnforce)) { - if (!stabMoves.length) break; - const moveid = this.sampleNoReplace(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce STAB - for (const type of types) { - // Moltres already has STAB, so ignore this block - if (species.id === 'moltres') break; - // prevents Meowscarada from being enforced stab moves - if (species.id === 'meowscarada') break; - // Check if a STAB move of that type should be required - const stabMoves = []; - for (const moveid of movePool) { - const move = this.dex.moves.get(moveid); - const moveType = this.getMoveType(move, species, abilities, teraType); - if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) { - stabMoves.push(moveid); - } - } - while (runEnforcementChecker(type)) { - if (!stabMoves.length) break; - const moveid = this.sampleNoReplace(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce Tera STAB - // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care) - if (!counter.get('stabtera') && !['Bulky Support', 'Doubles Support'].includes(role) && - !abilities.includes('Protean')) { - const stabMoves = []; - for (const moveid of movePool) { - const move = this.dex.moves.get(moveid); - const moveType = this.getMoveType(move, species, abilities, teraType); - if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && teraType === moveType) { - stabMoves.push(moveid); - } - } - if (stabMoves.length) { - const moveid = this.sample(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // If no STAB move was added, add a STAB move - // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care) - if (!counter.get('stab') && !abilities.includes('Protean')) { - const stabMoves = []; - for (const moveid of movePool) { - const move = this.dex.moves.get(moveid); - const moveType = this.getMoveType(move, species, abilities, teraType); - if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) { - stabMoves.push(moveid); - } - } - if (stabMoves.length) { - const moveid = this.sample(stabMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce recovery - if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) { - const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid)); - if (recoveryMoves.length) { - const moveid = this.sample(recoveryMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce setup - if (role.includes('Setup') || role === 'Tera Blast user') { - // First, try to add a non-Speed setup move - const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid)); - if (nonSpeedSetupMoves.length) { - const moveid = this.sample(nonSpeedSetupMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } else { - // No non-Speed setup moves, so add any (Speed) setup move - const setupMoves = movePool.filter(moveid => SETUP.includes(moveid)); - if (setupMoves.length) { - const moveid = this.sample(setupMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - } - - // Enforce redirecting moves and Fake Out on Doubles Support - if (role === 'Doubles Support') { - for (const moveid of ['fakeout', 'followme', 'ragepowder']) { - if (movePool.includes(moveid)) { - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - } - - // Enforce Protect - if (role.includes('Protect')) { - const protectMoves = movePool.filter(moveid => PROTECT_MOVES.includes(moveid)); - if (protectMoves.length) { - const moveid = this.sample(protectMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce a move not on the noSTAB list - if (!counter.damagingMoves.size) { - // Choose an attacking move - const attackingMoves = []; - for (const moveid of movePool) { - const move = this.dex.moves.get(moveid); - if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid); - } - if (attackingMoves.length) { - const moveid = this.sample(attackingMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - - // Enforce coverage move - if (!['AV Pivot', 'Fast Support', 'Bulky Support', 'Bulky Protect', 'Doubles Support'].includes(role)) { - if (counter.damagingMoves.size === 1) { - // Find the type of the current attacking move - const currentAttackType = counter.damagingMoves.values().next().value!.type; - // Choose an attacking move that is of different type to the current single attack - const coverageMoves = []; - for (const moveid of movePool) { - const move = this.dex.moves.get(moveid); - const moveType = this.getMoveType(move, species, abilities, teraType); - if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) { - if (currentAttackType !== moveType) coverageMoves.push(moveid); - } - } - if (coverageMoves.length) { - const moveid = this.sample(coverageMoves); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - } - - // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves. - // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition. - - // Choose remaining moves randomly from movepool and add them to moves list: - while (moves.size < this.maxMoveCount && movePool.length) { - if (moves.size + movePool.length <= this.maxMoveCount) { - for (const moveid of movePool) { - moves.add(moveid); - } - break; - } - const moveid = this.sample(movePool); - counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - for (const pair of MOVE_PAIRS) { - if (moveid === pair[0] && movePool.includes(pair[1])) { - counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - if (moveid === pair[1] && movePool.includes(pair[0])) { - counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles, - movePool, teraType, role); - } - } - } - return moves; - } - - override getPriorityItem( - ability: string, - types: string[], - moves: Set, - counter: MoveCounter, - teamDetails: RandomTeamsTypes.TeamDetails, - species: Species, - isLead: boolean, - isDoubles: boolean, - teraType: string, - role: RandomTeamsTypes.Role, - ) { - if (!isDoubles) { - if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) { - return 'Booster Energy'; - } - if (species.id === 'lokix') { - return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb'; - } - } - if (species.requiredItems) { - // Z-Crystals aren't available in Gen 9, so require Plates - if (species.baseSpecies === 'Arceus') { - return species.requiredItems[0]; - } - return this.sample(species.requiredItems); - } - if (role === 'AV Pivot') return 'Assault Vest'; - if (species.id === 'pikachu') return 'Light Ball'; - if (species.id === 'regieleki') return 'Magnet'; - if (species.id === 'smeargle') return 'Focus Sash'; - - // PMCM hardcodes - if (species.id === 'volcarona') return 'Heavy-Duty Boots'; - if (species.id === 'golemalola') return 'Life Orb'; - if (species.id === 'ironcrown') return moves.has('rest') ? 'Chesto Berry' : 'Leftovers'; - if (species.id === 'lurantis') return this.sample(['Life Orb', 'Leftovers']); - if (species.id === 'carbink') return 'Leftovers'; - if (species.id === 'moltres') return 'Life Orb'; - if (species.id === 'kommoo') return 'Throat Spray'; - if (species.id === 'volbeat') return 'Focus Sash'; - if (species.id === 'illumise') return 'Focus Sash'; - if (species.id === 'abomasnow') return 'Light Clay'; - if (species.id === 'dugtrio' && moves.has("swordsdance")) return 'Focus Sash'; - if (species.id === 'dugtrio') return 'Choice Band'; - if (species.id === 'tyranitar') return 'Choice Scarf'; - if (species.id === 'mimikyu') return 'Red Card'; - if (species.id === 'mesprit' && moves.has("aquaring")) return 'Leftovers'; - if (species.id === 'mesprit') return 'Throat Spray'; - if (species.id === 'electrode' && moves.has("rapidspin")) return 'Heavy-Duty Boots'; - if (species.id === 'electrode') return this.sample(['Normal Gem', 'Heavy-Duty Boots']); - if (species.id === 'taurospaldeacombat') return 'Expert Belt'; - if (species.id === 'chiyu') return 'Normalium Z'; - if (species.id === 'wochien') return 'Big Root'; - if (species.id === 'staraptor') return 'Choice Scarf'; - if (species.id === 'archaludon' && ability === 'Hydroelectric Dam') return 'Assault Vest'; - if (species.id === 'archaludon' && ability === 'Stamina') return 'Leftovers'; - if (species.id === 'malamar') return this.sample(['Mirror Herb', 'Leftovers']); - if (species.id === 'empoleon') return moves.has('watershuriken') ? 'Loaded Dice' : 'Leftovers'; - if (species.id === 'glastrier' && moves.has('swordsdance')) return 'Heavy-Duty Boots'; - if (species.id === 'glastrier') return 'Assault Vest'; - if (species.id === 'lycanrocmidnight') return 'Loaded Dice'; - if (species.id === 'lycanroc') return this.sample(['Leftovers', 'Heavy-Duty Boots']); - if (species.id === 'lycanrocdusk') return 'Expert Belt'; - if (species.id === 'dodrio' && moves.has('drillpeck')) return 'Life Orb'; - if (species.id === 'dodrio' && moves.has('bravebird')) return 'Heavy-Duty Boots'; - if (species.id === 'whiscash') return 'Rocky Helmet'; - if (species.id === 'hippowdon') return this.sample(['Leftovers', 'Rocky Helmet']); - if (species.id === 'cramorant') return 'Heavy-Duty Boots'; - if (species.id === 'grafaiai') return this.sample(['Red Card', 'Mirror Herb']); - if (species.id === 'tatsugiri') return 'Choice Scarf'; - if (species.id === 'kyurem') return 'Heavy-Duty Boots'; - if (species.id === 'roaringmoon') return 'Heavy-Duty Boots'; - if (species.id === 'milotic') return 'Rocky Helmet'; - if (species.id === 'gogoat') return 'Leftovers'; - if (species.id === 'clodsire') return this.sample(['Leftovers', 'Rocky Helmet']); - if (species.id === 'masquerain') return 'Heavy-Duty Boots'; - if (species.id === 'kyuremblack' && moves.has('roost')) return 'Heavy-Duty Boots'; - if (species.id === 'kyuremblack') return this.sample(['Choice Band', 'Heavy-Duty Boots']); - if (species.id === 'ironthorns') return 'Rocky Helmet'; - if (species.id === 'dudunsparce') return 'Leftovers'; - if (species.id === 'chienpao') return 'Heavy Duty Boots'; - if (species.id === 'pelipper' && moves.has('roost')) return 'Heavy-Duty Boots'; - if (species.id === 'pelipper') return 'Choice Specs'; - if (species.id === 'kleavor') return 'Choice Scarf'; - if (species.id === 'araquanid') return 'Heavy-Duty Boots'; - if (species.id === 'avalugghisui') return 'Heavy-Duty Boots'; - if (species.id === 'swalot') return 'Leftovers'; - if (species.id === 'zapdosgalar') return this.sample(['Choice Scarf', 'Expert Belt']); - if (species.id === 'phione') return 'Leftovers'; - if (species.id === 'sudowoodo') return 'Choice Band'; - if (species.id === 'dondozo') return 'Leftovers'; - if (species.id === 'golurk') return this.sample(['Life Orb', 'Punching Glove', 'Colbur Berry']); - if (species.id === 'meowscarada') return 'Heavy-Duty Boots'; - if (species.id === 'infernape') return this.sample(['Life Orb', 'Sitrus Berry', 'Air Balloon']); - if (species.id === 'urshifu') return this.sample(['Life Orb', 'Protective Pads']); - if (species.id === 'urshifurapidstrike') return this.sample(['Life Orb', 'Protective Pads']); - if (species.id === 'salamence') return this.sample(['Life Orb', 'Heavy-Duty Boots', 'Sky Plate']); - if (species.id === 'stonjourner') return 'Choice Scarf'; - if (species.id === 'veluza') return 'Sitrus Berry'; - if (species.id === 'ogerponhearthflame') return 'Hearthflame Mask'; - if (species.id === 'dachsbun') return 'Rocky Helmet'; - if (species.id === 'mew') return 'Starf Berry'; - if (species.id === 'magneton') return this.sample(['Air Balloon', 'Chople Berry']); - if (species.id === 'delibird') return 'Heavy-Duty Boots'; - if (species.id === 'hitmontop') return this.sample(['Protective Pads', 'Wide Lens']); - if (species.id === 'articunogalar' && moves.has('roost')) return 'Heavy-Duty Boots'; - if (species.id === 'articunogalar' && moves.has('aurasphere')) return 'Choice Specs'; - if (species.id === 'vaporeon') return 'Flame Orb'; - if (species.id === 'garganacl') return 'Poisonium Z'; - if (species.id === 'swanna') return 'Heavy-Duty Boots'; - if (species.id === 'terapagos') return 'Leftovers'; - if (species.id === 'flapple') return 'Tart Apple'; - if (species.id === 'genesectburn' && moves.has('sunsteelstrike')) return 'Burn Drive'; - if (species.id === 'genesectchill' && moves.has('behemothblade')) return 'Chill Drive'; - if (species.id === 'genesectdouse' && moves.has('makeitrain')) return 'Douse Drive'; - if (species.id === 'genesectshock' && moves.has('tachyoncutter')) return 'Shock Drive'; - if (species.id === 'honchkrow') return 'Heavy-Duty Boots'; - if (species.id === 'primeape') return 'Eviolite'; - if (species.id === 'rillaboom') return 'Heavy-Duty Boots'; - if (species.id === 'mandibuzz') return 'Thick Club'; - if (species.id === 'feraligatr') return 'Life Orb'; - if (species.id === 'salazzle') return 'Heavy-Duty Boots'; - if (species.id === 'kyogre') return 'Waterium Z'; - if (species.id === 'azelf') return 'Focus Band'; - if (species.id === 'decidueye') return this.sample(['Life Orb', 'Heavy-Duty Boots', "Leftovers"]); - if (species.id === 'ogerponcornerstone') return 'Cornerstone Mask'; - if (species.id === 'glimmora' && moves.has('meteorbeam')) return 'Power Herb'; - if (species.id === 'glimmora') return 'Air Balloon'; - if (species.id === 'wobbuffet') return 'Covert Cloak'; - } - - override randomSet( - s: string | Species, - teamDetails: RandomTeamsTypes.TeamDetails = {}, - isLead = false, - isDoubles = false - ): RandomTeamsTypes.RandomSet { - const species = this.dex.species.get(s); - const forme = this.getForme(species); - const sets = this.randomSets[species.id]["sets"]; - const possibleSets: RandomTeamsTypes.RandomSetData[] = []; - - const ruleTable = this.dex.formats.getRuleTable(this.format); - - for (const set of sets) { - // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy. - const abilities = set.abilities!; - if ( - isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) && - set.role === 'Fast Bulky Setup' - ) continue; - // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented. - if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') { - continue; - } - possibleSets.push(set); - } - const set = this.sampleIfArray(possibleSets); - const role = set.role; - const movePool: string[] = []; - for (const movename of set.movepool) { - movePool.push(this.dex.moves.get(movename).id); - } - const teraTypes = set.teraTypes!; - let teraType = this.sampleIfArray(teraTypes); - - let ability = ''; - let item = undefined; - - const evs = { hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85 }; - const ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 }; - - const types = species.types; - const abilities = set.abilities!; - - // Get moves - const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role); - const counter = this.queryMoves(moves, species, teraType, abilities); - - // Get ability - ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role); - - // Get items - // First, the priority items - item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role); - if (item === undefined) { - if (isDoubles) { - item = this.getDoublesItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role); - } else { - item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role); - } - } - - // Get level - const level = this.getLevel(species, isDoubles); - - // Prepare optimal HP - const srImmunity = ability === 'Magic Guard' || ability === 'Frost Cloak' || item === 'Heavy-Duty Boots'; - let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); - // Crash damage move users want an odd HP to survive two misses - if (['axekick', 'highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; - while (evs.hp > 1) { - const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item))) { - // Two Substitutes should activate Sitrus Berry - if (hp % 4 === 0) break; - } else if ((moves.has('bellydrum') || moves.has('filletaway')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) { - // Belly Drum should activate Sitrus Berry - if (hp % 2 === 0) break; - } else if (moves.has('substitute') && moves.has('endeavor')) { - // Luvdisc should be able to Substitute down to very low HP - if (hp % 4 > 0) break; - } else { - // Maximize number of Stealth Rock switch-ins - if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb'].includes(item)) break; - if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break; - // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry - if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break; - } - evs.hp -= 4; - } - - // Minimize confusion damage - const noAttackStatMoves = [...moves].every(m => { - const move = this.dex.moves.get(m); - if (move.damageCallback || move.damage) return true; - if (move.id === 'shellsidearm') return false; - // Magearna and doubles Dragonite, though these can work well as a general rule - if (move.id === 'terablast' && ( - species.id === 'porygon2' || moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa) - ) return false; - return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay'; - }); - // prevents Illumise (who can turn into Volbeat with Physical moves) from having 0 Atk EVs - if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' && - species.id !== 'illumise') { - evs.atk = 0; - ivs.atk = 0; - } - - if (moves.has('gyroball') || moves.has('trickroom') || moves.has('archaicglare')) { - evs.spe = 0; - ivs.spe = 0; - } - - // Enforce Tera Type after all set generation is done to prevent infinite generation - if (this.forceTeraType) teraType = this.forceTeraType; - - // shuffle moves to add more randomness to camomons - const shuffledMoves = Array.from(moves); - this.prng.shuffle(shuffledMoves); - return { - name: species.baseSpecies, - species: forme, - gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')), - shiny: this.randomChance(1, 1024), - level, - moves: shuffledMoves, - ability, - evs, - ivs, - item, - teraType, - role, - }; - } - - override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json'); - - randomChatBatsTeam() { - this.enforceNoDirectCustomBanlistChanges(); - - const seed = this.prng.getSeed(); - const ruleTable = this.dex.formats.getRuleTable(this.format); - const pokemon: RandomTeamsTypes.RandomSet[] = []; - - // For Monotype - const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause'); - const isDoubles = this.format.gameType !== 'singles'; - const typePool = this.dex.types.names().filter(name => name !== "Stellar"); - const type = this.forceMonotype || this.sample(typePool); - - // PotD stuff - // const usePotD = global.Config && Config.potd && ruleTable.has('potd'); - // const potd = usePotD ? this.dex.species.get(Config.potd) : null; - - const baseFormes: { [k: string]: number } = {}; - let hasMega = false; - - const typeCount: { [k: string]: number } = {}; - const typeComboCount: { [k: string]: number } = {}; - const typeWeaknesses: { [k: string]: number } = {}; - const typeDoubleWeaknesses: { [k: string]: number } = {}; - const teamDetails: RandomTeamsTypes.TeamDetails = {}; - let numMaxLevelPokemon = 0; - - const pokemonList = Object.keys(this.randomSets); - const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); - - let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1; - while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { - const baseSpecies = this.sampleNoReplace(baseSpeciesPool); - if (hasMega && (baseSpecies === "Typhlosion" || baseSpecies === "Altaria" || baseSpecies === "Raticate")) continue; - const currentSpeciesPool: Species[] = []; - // Check if the base species has a mega forme available - // let canMega = false; - // for (const poke of pokemonPool[baseSpecies]) { - // const species = this.dex.species.get(poke); - // if (!hasMega && species.isMega) canMega = true; - // } - for (const poke of pokemonPool[baseSpecies]) { - const species = this.dex.species.get(poke); - // Prevent multiple megas - if (hasMega && species.isMega) continue; - // Prevent base forme, if a mega is available - // Added Abomasnow exception - // if (canMega && !species.isMega && species.id !== 'abomasnow') continue; - currentSpeciesPool.push(species); - } - // change const to let when enforcing certain mons for testing - const species = this.sample(currentSpeciesPool); - - // let species = this.dex.species.get(this.sample(pokemonPool[baseSpecies])); - - if (!species.exists) continue; - - // Limit to one of each species (Species Clause) - if (baseFormes[species.baseSpecies]) continue; - - // Limit one Mega per team - if (hasMega && species.isMega) continue; - - // Treat Ogerpon formes and Terapagos like the Tera Blast user role; reject if team has one already - if ((species.baseSpecies === 'Ogerpon' || species.baseSpecies === 'Terapagos') && teamDetails.teraBlast) continue; - - // Illusion shouldn't be on the last slot - if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue; - - const types = species.types; - const typeCombo = types.slice().sort().join(); - const weakToFreezeDry = ( - this.dex.getEffectiveness('Ice', species) > 0 || - (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water')) - ); - // Dynamically scale limits for different team sizes. The default and minimum value is 1. - const limitFactor = Math.round(this.maxTeamSize / 6) || 1; - - // TEMPORARILY ADJUSTING BALANCE OF THIS BLOCK -- TOO FEW POKEMON TO GENERATE TEAMS - // update: reverting these changes, but leaving just in case - if (!isMonotype && !this.forceMonotype) { - let skip = false; - - // Limit two of any type - // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED - for (const typeName of types) { - if (typeCount[typeName] >= 2 /* 6 */ * limitFactor) { - skip = true; - break; - } - } - if (skip) continue; - - // Limit three weak to any type, and one double weak to any type - // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED - for (const typeName of this.dex.types.names()) { - // it's weak to the type - if (this.dex.getEffectiveness(typeName, species) > 0) { - if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0; - if (typeWeaknesses[typeName] >= 3 /* 6 */ * limitFactor) { - skip = true; - break; - } - } - if (this.dex.getEffectiveness(typeName, species) > 1) { - if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0; - if (typeDoubleWeaknesses[typeName] >= 1 /* 6 */ * Number(limitFactor)) { - skip = true; - break; - } - } - } - if (skip) continue; - - // Count Dry Skin/Fluffy as Fire weaknesses - // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED - if ( - this.dex.getEffectiveness('Fire', species) === 0 && - Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length - ) { - if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0; - if (typeWeaknesses['Fire'] >= 3 /* 6 */ * limitFactor) continue; - } - - // Limit four weak to Freeze-Dry - // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED - if (weakToFreezeDry) { - if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0; - if (typeWeaknesses['Freeze-Dry'] >= 4 /* 6 */ * limitFactor) continue; - } - - // Limit one level 100 Pokemon - if (!this.adjustLevel && (this.getLevel(species, isDoubles) === 100) && numMaxLevelPokemon >= limitFactor) { - continue; - } - } - - // Limit three of any type combination in Monotype - if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue; - - // The Pokemon of the Day - // if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd; - - // testing code - // if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Raticate-Mega'); - - let set: RandomTeamsTypes.RandomSet; - - if (leadsRemaining) { - if ( - isDoubles && DOUBLES_NO_LEAD_POKEMON.includes(species.baseSpecies) || - !isDoubles && NO_LEAD_POKEMON.includes(species.baseSpecies) - ) { - if (pokemon.length + leadsRemaining === this.maxTeamSize) continue; - set = this.randomSet(species, teamDetails, false, isDoubles); - pokemon.push(set); - } else { - set = this.randomSet(species, teamDetails, true, isDoubles); - pokemon.unshift(set); - leadsRemaining--; - } - } else { - set = this.randomSet(species, teamDetails, false, isDoubles); - pokemon.push(set); - } - - const item = this.dex.items.get(set.item); - - // Don't bother tracking details for the last Pokemon - if (pokemon.length === this.maxTeamSize) break; - - // Now that our Pokemon has passed all checks, we can increment our counters - baseFormes[species.baseSpecies] = 1; - - // Increment type counters - for (const typeName of types) { - if (typeName in typeCount) { - typeCount[typeName]++; - } else { - typeCount[typeName] = 1; - } - } - if (typeCombo in typeComboCount) { - typeComboCount[typeCombo]++; - } else { - typeComboCount[typeCombo] = 1; - } - - // Increment weakness counter - for (const typeName of this.dex.types.names()) { - // it's weak to the type - if (this.dex.getEffectiveness(typeName, species) > 0) { - typeWeaknesses[typeName]++; - } - if (this.dex.getEffectiveness(typeName, species) > 1) { - typeDoubleWeaknesses[typeName]++; - } - } - // Count Dry Skin/Fluffy as Fire weaknesses - if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) { - typeWeaknesses['Fire']++; - } - if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++; - - // Increment level 100 counter - if (set.level === 100) numMaxLevelPokemon++; - - // Track what the team has - if (item.megaStone) hasMega = true; - if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1; - if (set.ability === 'Drought' || set.ability === 'Orichalcum Pulse' || set.moves.includes('sunnyday')) { - teamDetails.sun = 1; - } - if (set.ability === 'Sand Stream') teamDetails.sand = 1; - if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) { - teamDetails.snow = 1; - } - if (set.moves.includes('healbell')) teamDetails.statusCure = 1; - if (set.moves.includes('spikes') || set.moves.includes('ceaselessedge')) { - teamDetails.spikes = (teamDetails.spikes || 0) + 1; - } - if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 1; - if (set.moves.includes('stealthrock') || set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1; - if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1; - if (set.moves.includes('defog')) teamDetails.defog = 1; - if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1; - if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) { - teamDetails.screens = 1; - } - if (set.role === 'Tera Blast user' || species.baseSpecies === "Ogerpon" || species.baseSpecies === "Terapagos") { - teamDetails.teraBlast = 1; - } - } - if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built - throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`); - } - - return pokemon; - } -} - -export default RandomChatBatsTeams; +import { RandomTeams, type MoveCounter } from "../gen9/teams"; + +// Moves that restore HP: +const RECOVERY_MOVES = [ + 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis', +]; +// Moves that boost Attack: +const PHYSICAL_SETUP = [ + 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance', + 'filletaway', +]; +// Moves which boost Special Attack: +const SPECIAL_SETUP = [ + 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'takeheart', 'torchsong', 'filletaway', +]; +// Some moves that only boost Speed: +const SPEED_SETUP = [ + 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'trailblaze', +]; +// Conglomerate for ease of access +const SETUP = [ + 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance', + 'filletaway', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance', + 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'trickroom', 'workup', 'victorydance', +]; +const SPEED_CONTROL = [ + 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom', +]; +// Hazard-setting moves +const HAZARDS = [ + 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes', +]; +// Protect and its variants +const PROTECT_MOVES = [ + 'banefulbunker', 'burningbulwark', 'protect', 'silktrap', 'spikyshield', +]; +// Moves that switch the user out +const PIVOT_MOVES = [ + 'chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch', +]; + +// Moves that should be paired together when possible +const MOVE_PAIRS = [ + ['lightscreen', 'reflect'], + ['sleeptalk', 'rest'], + ['protect', 'wish'], + ['leechseed', 'protect'], + ['leechseed', 'substitute'], + ['leechseed', 'burningbulwark'], +]; + +/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */ +const PRIORITY_POKEMON = [ + 'breloom', 'brutebonnet', 'cacturne', 'honchkrow', 'mimikyu', 'ragingbolt', 'scizor', +]; + +/** Pokemon who should never be in the lead slot */ +const NO_LEAD_POKEMON = [ + 'Zacian', 'Zamazenta', +]; +const DOUBLES_NO_LEAD_POKEMON = [ + 'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta', +]; +export class RandomChatBatsTeams extends RandomTeams { + override cullMovePool( + types: string[], + moves: Set, + abilities: string[], + counter: MoveCounter, + movePool: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ): void { + if (moves.size + movePool.length <= this.maxMoveCount) return; + // If we have two unfilled moves and only one unpaired move, cull the unpaired move. + if (moves.size === this.maxMoveCount - 2) { + const unpairedMoves = [...movePool]; + for (const pair of MOVE_PAIRS) { + if (movePool.includes(pair[0]) && movePool.includes(pair[1])) { + this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0])); + this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1])); + } + } + if (unpairedMoves.length === 1) { + this.fastPop(movePool, movePool.indexOf(unpairedMoves[0])); + } + } + + // These moves are paired, and shouldn't appear if there is not room for them both. + if (moves.size === this.maxMoveCount - 1) { + for (const pair of MOVE_PAIRS) { + if (movePool.includes(pair[0]) && movePool.includes(pair[1])) { + this.fastPop(movePool, movePool.indexOf(pair[0])); + this.fastPop(movePool, movePool.indexOf(pair[1])); + } + } + } + + // Develop additional move lists + const statusMoves = this.cachedStatusMoves; + + // Team-based move culls + if (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) { + if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect')); + if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.stickyWeb) { + if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.stealthRock) { + if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.defog || teamDetails.rapidSpin) { + if (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog')); + if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.toxicSpikes) { + if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.spikes && teamDetails.spikes >= 2) { + if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.statusCure) { + if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + + if (isDoubles) { + const doublesIncompatiblePairs = [ + // In order of decreasing generalizability + [SPEED_CONTROL, SPEED_CONTROL], + [HAZARDS, HAZARDS], + [PROTECT_MOVES, PROTECT_MOVES], + ['rockslide', 'stoneedge'], + [SETUP, ['fakeout', 'helpinghand']], + [PROTECT_MOVES, 'wideguard'], + [['fierydance', 'fireblast'], 'heatwave'], + ['dazzlinggleam', ['fleurcannon', 'moonblast']], + ['poisongas', ['toxicspikes', 'willowisp']], + [RECOVERY_MOVES, 'healpulse'], + ['lifedew', 'healpulse'], + ['haze', 'icywind'], + [['hydropump', 'muddywater'], ['muddywater', 'scald']], + ['disable', 'encore'], + ['freezedry', 'icebeam'], + ['energyball', 'leafstorm'], + ['wildcharge', 'thunderbolt'], + ['earthpower', 'sandsearstorm'], + ['coaching', ['helpinghand', 'howl']], + ]; + + for (const pair of doublesIncompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); + + if (role !== 'Offensive Protect') this.incompatibleMoves(moves, movePool, PROTECT_MOVES, ['flipturn', 'uturn']); + } + + // General incompatibilities + const incompatiblePairs = [ + // These moves don't mesh well with other aspects of the set + [statusMoves, ['healingwish', 'switcheroo', 'trick']], + [SETUP, PIVOT_MOVES], + [SETUP, HAZARDS], + [SETUP, ['defog', 'nuzzle', 'toxic', 'yawn', 'haze']], + [PHYSICAL_SETUP, PHYSICAL_SETUP], + [SPECIAL_SETUP, 'thunderwave'], + ['substitute', PIVOT_MOVES], + [SPEED_SETUP, ['aquajet', 'rest', 'trickroom']], + ['curse', ['irondefense', 'rapidspin']], + ['dragondance', 'dracometeor'], + + // These attacks are redundant with each other + ['surf', 'hydropump'], + ['liquidation', 'wavecrash'], + ['aquajet', 'flipturn'], + ['gigadrain', 'leafstorm'], + ['powerwhip', 'hornleech'], + [['airslash', 'bravebird', 'hurricane'], ['airslash', 'bravebird', 'hurricane']], + ['knockoff', 'foulplay'], + ['throatchop', ['crunch', 'lashout']], + ['doubleedge', ['bodyslam', 'headbutt']], + ['fireblast', ['fierydance', 'flamethrower']], + ['lavaplume', 'magmastorm'], + ['thunderpunch', 'wildcharge'], + [['thunderbolt', 'discharge', 'thunder'], ['thunderbolt', 'discharge', 'thunder']], + ['gunkshot', ['direclaw', 'poisonjab', 'sludgebomb']], + ['aurasphere', 'focusblast'], + ['closecombat', 'drainpunch'], + ['bugbite', 'pounce'], + [['dragonpulse', 'spacialrend'], 'dracometeor'], + ['heavyslam', 'flashcannon'], + ['alluringvoice', 'dazzlinggleam'], + + // These status moves are redundant with each other + ['taunt', 'disable'], + [['thunderwave', 'toxic'], ['thunderwave', 'willowisp']], + [['thunderwave', 'toxic', 'willowisp'], 'toxicspikes'], + ]; + + for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); + + if (!types.includes('Ice')) this.incompatibleMoves(moves, movePool, 'icebeam', 'icywind'); + + if (!isDoubles) this.incompatibleMoves(moves, movePool, ['taunt', 'strengthsap'], 'encore'); + + if (!types.includes('Dark') && teraType !== 'Dark') this.incompatibleMoves(moves, movePool, 'knockoff', 'suckerpunch'); + + if (!abilities.includes('Prankster')) this.incompatibleMoves(moves, movePool, 'thunderwave', 'yawn'); + + // This space reserved for assorted hardcodes that otherwise make little sense out of context + if (species.id === 'lurantis') this.incompatibleMoves(moves, movePool, 'leafstorm', 'powerwhip'); + if (species.id === 'ironcrown') this.incompatibleMoves(moves, movePool, 'kingsshield', 'stealthrock'); + if (species.id === 'ironcrown') this.incompatibleMoves(moves, movePool, 'kingsshield', 'rest'); + if (species.id === 'ironcrown') this.incompatibleMoves(moves, movePool, 'rest', 'stealthrock'); + if (species.id === 'carbink') this.incompatibleMoves(moves, movePool, 'spikes', 'stealthrock'); + if (species.id === 'moltres') this.incompatibleMoves(moves, movePool, 'bravebird', 'woodhammer'); + if (species.id === 'moltres') this.incompatibleMoves(moves, movePool, 'flareblitz', 'wavecrash'); + if (species.id === 'kommoo') this.incompatibleMoves(moves, movePool, 'aurasphere', 'closecombat'); + if (species.id === 'archaludon') this.incompatibleMoves(moves, movePool, 'scald', 'hydropump'); + if (species.id === 'abomasnowmega') this.incompatibleMoves(moves, movePool, 'iceshard', 'snowscape'); + if (species.id === 'regieleki') this.incompatibleMoves(moves, movePool, 'blazingtorque', 'soak'); + if (species.id === 'golurk') this.incompatibleMoves(moves, movePool, 'icepunch', 'dynamicpunch'); + if (species.id === 'ogerponhearthflame') this.incompatibleMoves(moves, movePool, 'crabhammer', 'stoneedge'); + if (species.id === 'hitmontop') this.incompatibleMoves(moves, movePool, 'bulkup', 'rapidspin'); + if (species.id === 'mesprit') this.incompatibleMoves(moves, movePool, 'psychic', 'storedpower'); + if (species.id === 'primeape') this.incompatibleMoves(moves, movePool, 'knockoff', 'earthquake'); + if (species.id === 'feraligatrmega') this.incompatibleMoves(moves, movePool, 'thunderfang', 'poisonfang'); + if (species.id === 'salazzle') this.incompatibleMoves(moves, movePool, 'malignantchain', 'venoshock'); + if (species.id === 'glimmora') this.incompatibleMoves(moves, movePool, 'powergem', 'meteorbeam'); + if (species.id === 'wobbuffet') this.incompatibleMoves(moves, movePool, 'shedtail', 'encore'); + if (species.id === 'wobbuffet') this.incompatibleMoves(moves, movePool, 'nightshade', 'guillotine'); + } + + override randomMoveset( + types: string[], + abilities: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + movePool: string[], + teraType: string, + role: RandomTeamsTypes.Role, + ): Set { + const moves = new Set(); + let counter = this.queryMoves(moves, species, teraType, abilities); + this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role); + + // If there are only four moves, add all moves and return early + if (movePool.length <= this.maxMoveCount) { + for (const moveid of movePool) { + moves.add(moveid); + } + return moves; + } + + const runEnforcementChecker = (checkerName: string) => { + if (!this.moveEnforcementCheckers[checkerName]) return false; + return this.moveEnforcementCheckers[checkerName]( + movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role + ); + }; + + if (role === 'Tera Blast user') { + counter = this.addMove('terablast', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + // Add required move (e.g. Relic Song for Meloetta-P) + if (species.requiredMove) { + const move = this.dex.moves.get(species.requiredMove).id; + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Add other moves you really want to have, e.g. STAB, recovery, setup. + + // PMCM hardcodes (reserve these to when absolutely necessary, let the script do most of the work) + // forces Splash on Chi-Yu's moveset, since it uses Z-Splash + if (species.id === 'chiyu') { + if (movePool.includes('splash')) { + counter = this.addMove('splash', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + // enforces both primary stabs on Infernape + if (species.id === 'infernape' && movePool.includes('mindblown')) { + counter = this.addMove('mindblown', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + counter = this.addMove('alloutassault', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce Facade if Guts is a possible ability + if (movePool.includes('facade') && abilities.includes('Guts')) { + counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce Night Shade, Revelation Dance, Revival Blessing, and Sticky Web + for (const moveid of ['nightshade', 'revelationdance', 'revivalblessing', 'stickyweb']) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Trick Room on Doubles Wallbreaker + if (movePool.includes('trickroom') && role === 'Doubles Wallbreaker') { + counter = this.addMove('trickroom', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce hazard removal on Bulky Support if the team doesn't already have it + if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) { + if (movePool.includes('rapidspin')) { + counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + if (movePool.includes('defog')) { + counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Knock Off on pure Normal- and Fighting-types in singles + if (!isDoubles && types.length === 1 && (types.includes('Normal') || types.includes('Fighting'))) { + if (movePool.includes('knockoff')) { + counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Flip Turn on pure Water-type Wallbreakers + if (types.length === 1 && types.includes('Water') && + role === 'Wallbreaker' && movePool.includes('flipturn')) { + counter = this.addMove('flipturn', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce Spore on Smeargle + if (species.id === 'smeargle') { + if (movePool.includes('spore')) { + counter = this.addMove('spore', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce moves in doubles + if (isDoubles) { + const doublesEnforcedMoves = ['auroraveil', 'mortalspin', 'spore']; + for (const moveid of doublesEnforcedMoves) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + // Enforce Fake Out on slow Pokemon + if (movePool.includes('fakeout') && species.baseStats.spe <= 50) { + counter = this.addMove('fakeout', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + // Enforce Tailwind on Prankster and Gale Wings users + if (movePool.includes('tailwind') && (abilities.includes('Prankster') || abilities.includes('Gale Wings'))) { + counter = this.addMove('tailwind', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + // Enforce Thunder Wave on Prankster users as well + if (movePool.includes('thunderwave') && abilities.includes('Prankster')) { + counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce STAB priority + if ( + ['Bulky Attacker', 'Bulky Setup', 'Wallbreaker', 'Doubles Wallbreaker'].includes(role) || + PRIORITY_POKEMON.includes(species.id) + ) { + const priorityMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if ( + types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) && + (move.basePower || move.basePowerCallback) + ) { + priorityMoves.push(moveid); + } + } + if (priorityMoves.length) { + const moveid = this.sample(priorityMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce a single STAB for Moltres + if (species.id === 'moltres') { + const typeToEnforce = this.randomChance(1, 2) ? 'Fire' : 'Flying'; + + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && typeToEnforce === moveType) { + stabMoves.push(moveid); + } + } + while (runEnforcementChecker(typeToEnforce)) { + if (!stabMoves.length) break; + const moveid = this.sampleNoReplace(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce STAB + for (const type of types) { + // Moltres already has STAB, so ignore this block + if (species.id === 'moltres') break; + // prevents Meowscarada from being enforced stab moves + if (species.id === 'meowscarada') break; + // Check if a STAB move of that type should be required + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) { + stabMoves.push(moveid); + } + } + while (runEnforcementChecker(type)) { + if (!stabMoves.length) break; + const moveid = this.sampleNoReplace(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Tera STAB + // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care) + if (!counter.get('stabtera') && !['Bulky Support', 'Doubles Support'].includes(role) && + !abilities.includes('Protean')) { + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && teraType === moveType) { + stabMoves.push(moveid); + } + } + if (stabMoves.length) { + const moveid = this.sample(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // If no STAB move was added, add a STAB move + // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care) + if (!counter.get('stab') && !abilities.includes('Protean')) { + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) { + stabMoves.push(moveid); + } + } + if (stabMoves.length) { + const moveid = this.sample(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce recovery + if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) { + const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid)); + if (recoveryMoves.length) { + const moveid = this.sample(recoveryMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce setup + if (role.includes('Setup') || role === 'Tera Blast user') { + // First, try to add a non-Speed setup move + const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid)); + if (nonSpeedSetupMoves.length) { + const moveid = this.sample(nonSpeedSetupMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } else { + // No non-Speed setup moves, so add any (Speed) setup move + const setupMoves = movePool.filter(moveid => SETUP.includes(moveid)); + if (setupMoves.length) { + const moveid = this.sample(setupMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + + // Enforce redirecting moves and Fake Out on Doubles Support + if (role === 'Doubles Support') { + for (const moveid of ['fakeout', 'followme', 'ragepowder']) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + + // Enforce Protect + if (role.includes('Protect')) { + const protectMoves = movePool.filter(moveid => PROTECT_MOVES.includes(moveid)); + if (protectMoves.length) { + const moveid = this.sample(protectMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce a move not on the noSTAB list + if (!counter.damagingMoves.size) { + // Choose an attacking move + const attackingMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid); + } + if (attackingMoves.length) { + const moveid = this.sample(attackingMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce coverage move + if (!['AV Pivot', 'Fast Support', 'Bulky Support', 'Bulky Protect', 'Doubles Support'].includes(role)) { + if (counter.damagingMoves.size === 1) { + // Find the type of the current attacking move + const currentAttackType = counter.damagingMoves.values().next().value!.type; + // Choose an attacking move that is of different type to the current single attack + const coverageMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) { + if (currentAttackType !== moveType) coverageMoves.push(moveid); + } + } + if (coverageMoves.length) { + const moveid = this.sample(coverageMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + + // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves. + // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition. + + // Choose remaining moves randomly from movepool and add them to moves list: + while (moves.size < this.maxMoveCount && movePool.length) { + if (moves.size + movePool.length <= this.maxMoveCount) { + for (const moveid of movePool) { + moves.add(moveid); + } + break; + } + const moveid = this.sample(movePool); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + for (const pair of MOVE_PAIRS) { + if (moveid === pair[0] && movePool.includes(pair[1])) { + counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + if (moveid === pair[1] && movePool.includes(pair[0])) { + counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + return moves; + } + + override getPriorityItem( + ability: string, + types: string[], + moves: Set, + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ) { + if (!isDoubles) { + if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) { + return 'Booster Energy'; + } + if (species.id === 'lokix') { + return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb'; + } + } + if (species.requiredItems) { + // Z-Crystals aren't available in Gen 9, so require Plates + if (species.baseSpecies === 'Arceus') { + return species.requiredItems[0]; + } + return this.sample(species.requiredItems); + } + if (role === 'AV Pivot') return 'Assault Vest'; + if (species.id === 'pikachu') return 'Light Ball'; + if (species.id === 'regieleki') return 'Magnet'; + if (species.id === 'smeargle') return 'Focus Sash'; + + // PMCM hardcodes + if (species.id === 'volcarona') return 'Heavy-Duty Boots'; + if (species.id === 'golemalola') return 'Life Orb'; + if (species.id === 'ironcrown') return moves.has('rest') ? 'Chesto Berry' : 'Leftovers'; + if (species.id === 'lurantis') return this.sample(['Life Orb', 'Leftovers']); + if (species.id === 'carbink') return 'Leftovers'; + if (species.id === 'moltres') return 'Life Orb'; + if (species.id === 'kommoo') return 'Throat Spray'; + if (species.id === 'volbeat') return 'Focus Sash'; + if (species.id === 'illumise') return 'Focus Sash'; + if (species.id === 'abomasnow') return 'Light Clay'; + if (species.id === 'dugtrio' && moves.has("swordsdance")) return 'Focus Sash'; + if (species.id === 'dugtrio') return 'Choice Band'; + if (species.id === 'tyranitar') return 'Choice Scarf'; + if (species.id === 'mimikyu') return 'Red Card'; + if (species.id === 'mesprit' && moves.has("aquaring")) return 'Leftovers'; + if (species.id === 'mesprit') return 'Throat Spray'; + if (species.id === 'electrode' && moves.has("rapidspin")) return 'Heavy-Duty Boots'; + if (species.id === 'electrode') return this.sample(['Normal Gem', 'Heavy-Duty Boots']); + if (species.id === 'taurospaldeacombat') return 'Expert Belt'; + if (species.id === 'chiyu') return 'Normalium Z'; + if (species.id === 'wochien') return 'Big Root'; + if (species.id === 'staraptor') return 'Choice Scarf'; + if (species.id === 'archaludon' && ability === 'Hydroelectric Dam') return 'Assault Vest'; + if (species.id === 'archaludon' && ability === 'Stamina') return 'Leftovers'; + if (species.id === 'malamar') return this.sample(['Mirror Herb', 'Leftovers']); + if (species.id === 'empoleon') return moves.has('watershuriken') ? 'Loaded Dice' : 'Leftovers'; + if (species.id === 'glastrier' && moves.has('swordsdance')) return 'Heavy-Duty Boots'; + if (species.id === 'glastrier') return 'Assault Vest'; + if (species.id === 'lycanrocmidnight') return 'Loaded Dice'; + if (species.id === 'lycanroc') return this.sample(['Leftovers', 'Heavy-Duty Boots']); + if (species.id === 'lycanrocdusk') return 'Expert Belt'; + if (species.id === 'dodrio' && moves.has('drillpeck')) return 'Life Orb'; + if (species.id === 'dodrio' && moves.has('bravebird')) return 'Heavy-Duty Boots'; + if (species.id === 'whiscash') return 'Rocky Helmet'; + if (species.id === 'hippowdon') return this.sample(['Leftovers', 'Rocky Helmet']); + if (species.id === 'cramorant') return 'Heavy-Duty Boots'; + if (species.id === 'grafaiai') return this.sample(['Red Card', 'Mirror Herb']); + if (species.id === 'tatsugiri') return 'Choice Scarf'; + if (species.id === 'kyurem') return 'Heavy-Duty Boots'; + if (species.id === 'roaringmoon') return 'Heavy-Duty Boots'; + if (species.id === 'milotic') return 'Rocky Helmet'; + if (species.id === 'gogoat') return 'Leftovers'; + if (species.id === 'clodsire') return this.sample(['Leftovers', 'Rocky Helmet']); + if (species.id === 'masquerain') return 'Heavy-Duty Boots'; + if (species.id === 'kyuremblack' && moves.has('roost')) return 'Heavy-Duty Boots'; + if (species.id === 'kyuremblack') return this.sample(['Choice Band', 'Heavy-Duty Boots']); + if (species.id === 'ironthorns') return 'Rocky Helmet'; + if (species.id === 'dudunsparce') return 'Leftovers'; + if (species.id === 'chienpao') return 'Heavy Duty Boots'; + if (species.id === 'pelipper' && moves.has('roost')) return 'Heavy-Duty Boots'; + if (species.id === 'pelipper') return 'Choice Specs'; + if (species.id === 'kleavor') return 'Choice Scarf'; + if (species.id === 'araquanid') return 'Heavy-Duty Boots'; + if (species.id === 'avalugghisui') return 'Heavy-Duty Boots'; + if (species.id === 'swalot') return 'Leftovers'; + if (species.id === 'zapdosgalar') return this.sample(['Choice Scarf', 'Expert Belt']); + if (species.id === 'phione') return 'Leftovers'; + if (species.id === 'sudowoodo') return 'Choice Band'; + if (species.id === 'dondozo') return 'Leftovers'; + if (species.id === 'golurk') return this.sample(['Life Orb', 'Punching Glove', 'Colbur Berry']); + if (species.id === 'meowscarada') return 'Heavy-Duty Boots'; + if (species.id === 'infernape') return this.sample(['Life Orb', 'Sitrus Berry', 'Air Balloon']); + if (species.id === 'urshifu') return this.sample(['Life Orb', 'Protective Pads']); + if (species.id === 'urshifurapidstrike') return this.sample(['Life Orb', 'Protective Pads']); + if (species.id === 'salamence') return this.sample(['Life Orb', 'Heavy-Duty Boots', 'Sky Plate']); + if (species.id === 'stonjourner') return 'Choice Scarf'; + if (species.id === 'veluza') return 'Sitrus Berry'; + if (species.id === 'ogerponhearthflame') return 'Hearthflame Mask'; + if (species.id === 'dachsbun') return 'Rocky Helmet'; + if (species.id === 'mew') return 'Starf Berry'; + if (species.id === 'magneton') return this.sample(['Air Balloon', 'Chople Berry']); + if (species.id === 'delibird') return 'Heavy-Duty Boots'; + if (species.id === 'hitmontop') return this.sample(['Protective Pads', 'Wide Lens']); + if (species.id === 'articunogalar' && moves.has('roost')) return 'Heavy-Duty Boots'; + if (species.id === 'articunogalar' && moves.has('aurasphere')) return 'Choice Specs'; + if (species.id === 'vaporeon') return 'Flame Orb'; + if (species.id === 'garganacl') return 'Poisonium Z'; + if (species.id === 'swanna') return 'Heavy-Duty Boots'; + if (species.id === 'terapagos') return 'Leftovers'; + if (species.id === 'flapple') return 'Tart Apple'; + if (species.id === 'genesectburn' && moves.has('sunsteelstrike')) return 'Burn Drive'; + if (species.id === 'genesectchill' && moves.has('behemothblade')) return 'Chill Drive'; + if (species.id === 'genesectdouse' && moves.has('makeitrain')) return 'Douse Drive'; + if (species.id === 'genesectshock' && moves.has('tachyoncutter')) return 'Shock Drive'; + if (species.id === 'honchkrow') return 'Heavy-Duty Boots'; + if (species.id === 'primeape') return 'Eviolite'; + if (species.id === 'rillaboom') return 'Heavy-Duty Boots'; + if (species.id === 'mandibuzz') return 'Thick Club'; + if (species.id === 'feraligatr') return 'Life Orb'; + if (species.id === 'salazzle') return 'Heavy-Duty Boots'; + if (species.id === 'kyogre') return 'Waterium Z'; + if (species.id === 'azelf') return 'Focus Band'; + if (species.id === 'decidueye') return this.sample(['Life Orb', 'Heavy-Duty Boots', "Leftovers"]); + if (species.id === 'ogerponcornerstone') return 'Cornerstone Mask'; + if (species.id === 'glimmora' && moves.has('meteorbeam')) return 'Power Herb'; + if (species.id === 'glimmora') return 'Air Balloon'; + if (species.id === 'wobbuffet') return 'Covert Cloak'; + } + + override randomSet( + s: string | Species, + teamDetails: RandomTeamsTypes.TeamDetails = {}, + isLead = false, + isDoubles = false + ): RandomTeamsTypes.RandomSet { + const species = this.dex.species.get(s); + const forme = this.getForme(species); + const sets = this.randomSets[species.id]["sets"]; + const possibleSets: RandomTeamsTypes.RandomSetData[] = []; + + const ruleTable = this.dex.formats.getRuleTable(this.format); + + for (const set of sets) { + // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy. + const abilities = set.abilities!; + if ( + isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) && + set.role === 'Fast Bulky Setup' + ) continue; + // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented. + if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') { + continue; + } + possibleSets.push(set); + } + const set = this.sampleIfArray(possibleSets); + const role = set.role; + const movePool: string[] = []; + for (const movename of set.movepool) { + movePool.push(this.dex.moves.get(movename).id); + } + const teraTypes = set.teraTypes!; + let teraType = this.sampleIfArray(teraTypes); + + let ability = ''; + let item = undefined; + + const evs = { hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85 }; + const ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 }; + + const types = species.types; + const abilities = set.abilities!; + + // Get moves + const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role); + const counter = this.queryMoves(moves, species, teraType, abilities); + + // Get ability + ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role); + + // Get items + // First, the priority items + item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role); + if (item === undefined) { + if (isDoubles) { + item = this.getDoublesItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role); + } else { + item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role); + } + } + + // Get level + const level = this.getLevel(species, isDoubles); + + // Prepare optimal HP + const srImmunity = ability === 'Magic Guard' || ability === 'Frost Cloak' || item === 'Heavy-Duty Boots'; + let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); + // Crash damage move users want an odd HP to survive two misses + if (['axekick', 'highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; + while (evs.hp > 1) { + const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item))) { + // Two Substitutes should activate Sitrus Berry + if (hp % 4 === 0) break; + } else if ((moves.has('bellydrum') || moves.has('filletaway')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) { + // Belly Drum should activate Sitrus Berry + if (hp % 2 === 0) break; + } else if (moves.has('substitute') && moves.has('endeavor')) { + // Luvdisc should be able to Substitute down to very low HP + if (hp % 4 > 0) break; + } else { + // Maximize number of Stealth Rock switch-ins + if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb'].includes(item)) break; + if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break; + // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry + if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break; + } + evs.hp -= 4; + } + + // Minimize confusion damage + const noAttackStatMoves = [...moves].every(m => { + const move = this.dex.moves.get(m); + if (move.damageCallback || move.damage) return true; + if (move.id === 'shellsidearm') return false; + // Magearna and doubles Dragonite, though these can work well as a general rule + if (move.id === 'terablast' && ( + species.id === 'porygon2' || moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa) + ) return false; + return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay'; + }); + // prevents Illumise (who can turn into Volbeat with Physical moves) from having 0 Atk EVs + if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' && + species.id !== 'illumise') { + evs.atk = 0; + ivs.atk = 0; + } + + if (moves.has('gyroball') || moves.has('trickroom') || moves.has('archaicglare')) { + evs.spe = 0; + ivs.spe = 0; + } + + // Enforce Tera Type after all set generation is done to prevent infinite generation + if (this.forceTeraType) teraType = this.forceTeraType; + + // shuffle moves to add more randomness to camomons + const shuffledMoves = Array.from(moves); + this.prng.shuffle(shuffledMoves); + return { + name: species.baseSpecies, + species: forme, + gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')), + shiny: this.randomChance(1, 1024), + level, + moves: shuffledMoves, + ability, + evs, + ivs, + item, + teraType, + role, + }; + } + + override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json'); + + randomChatBatsTeam() { + this.enforceNoDirectCustomBanlistChanges(); + + const seed = this.prng.getSeed(); + const ruleTable = this.dex.formats.getRuleTable(this.format); + const pokemon: RandomTeamsTypes.RandomSet[] = []; + + // For Monotype + const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause'); + const isDoubles = this.format.gameType !== 'singles'; + const typePool = this.dex.types.names().filter(name => name !== "Stellar"); + const type = this.forceMonotype || this.sample(typePool); + + // PotD stuff + // const usePotD = global.Config && Config.potd && ruleTable.has('potd'); + // const potd = usePotD ? this.dex.species.get(Config.potd) : null; + + const baseFormes: { [k: string]: number } = {}; + let hasMega = false; + + const typeCount: { [k: string]: number } = {}; + const typeComboCount: { [k: string]: number } = {}; + const typeWeaknesses: { [k: string]: number } = {}; + const typeDoubleWeaknesses: { [k: string]: number } = {}; + const teamDetails: RandomTeamsTypes.TeamDetails = {}; + let numMaxLevelPokemon = 0; + + const pokemonList = Object.keys(this.randomSets); + const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); + + let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1; + while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { + const baseSpecies = this.sampleNoReplace(baseSpeciesPool); + if (hasMega && (baseSpecies === "Typhlosion" || baseSpecies === "Altaria" || baseSpecies === "Raticate")) continue; + const currentSpeciesPool: Species[] = []; + // Check if the base species has a mega forme available + // let canMega = false; + // for (const poke of pokemonPool[baseSpecies]) { + // const species = this.dex.species.get(poke); + // if (!hasMega && species.isMega) canMega = true; + // } + for (const poke of pokemonPool[baseSpecies]) { + const species = this.dex.species.get(poke); + // Prevent multiple megas + if (hasMega && species.isMega) continue; + // Prevent base forme, if a mega is available + // Added Abomasnow exception + // if (canMega && !species.isMega && species.id !== 'abomasnow') continue; + currentSpeciesPool.push(species); + } + // change const to let when enforcing certain mons for testing + const species = this.sample(currentSpeciesPool); + + // let species = this.dex.species.get(this.sample(pokemonPool[baseSpecies])); + + if (!species.exists) continue; + + // Limit to one of each species (Species Clause) + if (baseFormes[species.baseSpecies]) continue; + + // Limit one Mega per team + if (hasMega && species.isMega) continue; + + // Treat Ogerpon formes and Terapagos like the Tera Blast user role; reject if team has one already + if ((species.baseSpecies === 'Ogerpon' || species.baseSpecies === 'Terapagos') && teamDetails.teraBlast) continue; + + // Illusion shouldn't be on the last slot + if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue; + + const types = species.types; + const typeCombo = types.slice().sort().join(); + const weakToFreezeDry = ( + this.dex.getEffectiveness('Ice', species) > 0 || + (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water')) + ); + // Dynamically scale limits for different team sizes. The default and minimum value is 1. + const limitFactor = Math.round(this.maxTeamSize / 6) || 1; + + // TEMPORARILY ADJUSTING BALANCE OF THIS BLOCK -- TOO FEW POKEMON TO GENERATE TEAMS + // update: reverting these changes, but leaving just in case + if (!isMonotype && !this.forceMonotype) { + let skip = false; + + // Limit two of any type + // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED + for (const typeName of types) { + if (typeCount[typeName] >= 2 /* 6 */ * limitFactor) { + skip = true; + break; + } + } + if (skip) continue; + + // Limit three weak to any type, and one double weak to any type + // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED + for (const typeName of this.dex.types.names()) { + // it's weak to the type + if (this.dex.getEffectiveness(typeName, species) > 0) { + if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0; + if (typeWeaknesses[typeName] >= 3 /* 6 */ * limitFactor) { + skip = true; + break; + } + } + if (this.dex.getEffectiveness(typeName, species) > 1) { + if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0; + if (typeDoubleWeaknesses[typeName] >= 1 /* 6 */ * Number(limitFactor)) { + skip = true; + break; + } + } + } + if (skip) continue; + + // Count Dry Skin/Fluffy as Fire weaknesses + // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED + if ( + this.dex.getEffectiveness('Fire', species) === 0 && + Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length + ) { + if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0; + if (typeWeaknesses['Fire'] >= 3 /* 6 */ * limitFactor) continue; + } + + // Limit four weak to Freeze-Dry + // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED + if (weakToFreezeDry) { + if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0; + if (typeWeaknesses['Freeze-Dry'] >= 4 /* 6 */ * limitFactor) continue; + } + + // Limit one level 100 Pokemon + if (!this.adjustLevel && (this.getLevel(species, isDoubles) === 100) && numMaxLevelPokemon >= limitFactor) { + continue; + } + } + + // Limit three of any type combination in Monotype + if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue; + + // The Pokemon of the Day + // if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd; + + // testing code + // if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Raticate-Mega'); + + let set: RandomTeamsTypes.RandomSet; + + if (leadsRemaining) { + if ( + isDoubles && DOUBLES_NO_LEAD_POKEMON.includes(species.baseSpecies) || + !isDoubles && NO_LEAD_POKEMON.includes(species.baseSpecies) + ) { + if (pokemon.length + leadsRemaining === this.maxTeamSize) continue; + set = this.randomSet(species, teamDetails, false, isDoubles); + pokemon.push(set); + } else { + set = this.randomSet(species, teamDetails, true, isDoubles); + pokemon.unshift(set); + leadsRemaining--; + } + } else { + set = this.randomSet(species, teamDetails, false, isDoubles); + pokemon.push(set); + } + + const item = this.dex.items.get(set.item); + + // Don't bother tracking details for the last Pokemon + if (pokemon.length === this.maxTeamSize) break; + + // Now that our Pokemon has passed all checks, we can increment our counters + baseFormes[species.baseSpecies] = 1; + + // Increment type counters + for (const typeName of types) { + if (typeName in typeCount) { + typeCount[typeName]++; + } else { + typeCount[typeName] = 1; + } + } + if (typeCombo in typeComboCount) { + typeComboCount[typeCombo]++; + } else { + typeComboCount[typeCombo] = 1; + } + + // Increment weakness counter + for (const typeName of this.dex.types.names()) { + // it's weak to the type + if (this.dex.getEffectiveness(typeName, species) > 0) { + typeWeaknesses[typeName]++; + } + if (this.dex.getEffectiveness(typeName, species) > 1) { + typeDoubleWeaknesses[typeName]++; + } + } + // Count Dry Skin/Fluffy as Fire weaknesses + if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) { + typeWeaknesses['Fire']++; + } + if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++; + + // Increment level 100 counter + if (set.level === 100) numMaxLevelPokemon++; + + // Track what the team has + if (item.megaStone) hasMega = true; + if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1; + if (set.ability === 'Drought' || set.ability === 'Orichalcum Pulse' || set.moves.includes('sunnyday')) { + teamDetails.sun = 1; + } + if (set.ability === 'Sand Stream') teamDetails.sand = 1; + if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) { + teamDetails.snow = 1; + } + if (set.moves.includes('healbell')) teamDetails.statusCure = 1; + if (set.moves.includes('spikes') || set.moves.includes('ceaselessedge')) { + teamDetails.spikes = (teamDetails.spikes || 0) + 1; + } + if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 1; + if (set.moves.includes('stealthrock') || set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1; + if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1; + if (set.moves.includes('defog')) teamDetails.defog = 1; + if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1; + if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) { + teamDetails.screens = 1; + } + if (set.role === 'Tera Blast user' || species.baseSpecies === "Ogerpon" || species.baseSpecies === "Terapagos") { + teamDetails.teraBlast = 1; + } + } + if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built + throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`); + } + + return pokemon; + } +} + +export default RandomChatBatsTeams; diff --git a/data/random-battles/gen3/sets.json b/data/random-battles/gen3/sets.json index 0274430dd1..fbe3579165 100644 --- a/data/random-battles/gen3/sets.json +++ b/data/random-battles/gen3/sets.json @@ -192,7 +192,7 @@ "movepool": ["earthquake", "fireblast", "icebeam", "shadowball", "sludgebomb", "substitute", "thunderbolt"], "abilities": ["Poison Point"] }, - { + { "role": "Wallbreaker", "movepool": ["earthquake", "fireblast", "icebeam", "rockslide", "shadowball", "sludgebomb"], "abilities": ["Poison Point"] @@ -619,7 +619,7 @@ "movepool": ["doubleedge", "hiddenpowerghost", "hiddenpowerground", "surf", "swordsdance"], "abilities": ["Hyper Cutter"] }, - { + { "role": "Bulky Setup", "movepool": ["doubleedge", "hiddenpowerghost", "mudshot", "swordsdance"], "abilities": ["Hyper Cutter"] @@ -1237,7 +1237,7 @@ ] }, "crobat": { - "level": 77, + "level": 78, "sets": [ { "role": "Fast Attacker", @@ -1485,7 +1485,7 @@ ] }, "slowking": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Support", @@ -1600,7 +1600,7 @@ ] }, "steelix": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Attacker", @@ -1636,7 +1636,7 @@ ] }, "qwilfish": { - "level": 83, + "level": 82, "sets": [ { "role": "Wallbreaker", @@ -1734,7 +1734,7 @@ ] }, "magcargo": { - "level": 99, + "level": 100, "sets": [ { "role": "Bulky Support", @@ -1785,7 +1785,7 @@ ] }, "delibird": { - "level": 99, + "level": 98, "sets": [ { "role": "Wallbreaker", @@ -2378,7 +2378,7 @@ ] }, "mawile": { - "level": 95, + "level": 96, "sets": [ { "role": "Setup Sweeper", @@ -2567,7 +2567,7 @@ ] }, "torkoal": { - "level": 91, + "level": 90, "sets": [ { "role": "Bulky Attacker", diff --git a/data/random-battles/gen4/sets.json b/data/random-battles/gen4/sets.json index 1b94aa0a29..be4c67dc51 100644 --- a/data/random-battles/gen4/sets.json +++ b/data/random-battles/gen4/sets.json @@ -234,7 +234,7 @@ ] }, "parasect": { - "level": 99, + "level": 100, "sets": [ { "role": "Bulky Support", @@ -340,7 +340,7 @@ ] }, "alakazam": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", @@ -388,7 +388,7 @@ ] }, "golem": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Attacker", @@ -565,7 +565,7 @@ ] }, "marowak": { - "level": 89, + "level": 88, "sets": [ { "role": "Wallbreaker", @@ -856,7 +856,7 @@ ] }, "snorlax": { - "level": 78, + "level": 77, "sets": [ { "role": "Bulky Attacker", @@ -1158,7 +1158,7 @@ ] }, "sunflora": { - "level": 100, + "level": 99, "sets": [ { "role": "Wallbreaker", @@ -1427,7 +1427,7 @@ ] }, "mantine": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Support", @@ -1529,7 +1529,7 @@ ] }, "hitmontop": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Support", @@ -2319,7 +2319,7 @@ ] }, "cradily": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Attacker", @@ -2734,7 +2734,7 @@ ] }, "torterra": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Attacker", @@ -2852,7 +2852,7 @@ ] }, "rampardos": { - "level": 87, + "level": 86, "sets": [ { "role": "Setup Sweeper", @@ -2944,7 +2944,7 @@ ] }, "floatzel": { - "level": 83, + "level": 82, "sets": [ { "role": "Fast Attacker", @@ -3268,7 +3268,7 @@ ] }, "tangrowth": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Attacker", @@ -3499,7 +3499,7 @@ ] }, "rotomfrost": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Attacker", @@ -3695,7 +3695,7 @@ ] }, "manaphy": { - "level": 75, + "level": 76, "sets": [ { "role": "Bulky Setup", diff --git a/data/random-battles/gen5/sets.json b/data/random-battles/gen5/sets.json index 53315306f1..0a8f6faf70 100644 --- a/data/random-battles/gen5/sets.json +++ b/data/random-battles/gen5/sets.json @@ -101,7 +101,7 @@ ] }, "fearow": { - "level": 89, + "level": 88, "sets": [ { "role": "Wallbreaker", @@ -393,7 +393,7 @@ ] }, "machamp": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Attacker", @@ -606,7 +606,7 @@ ] }, "hitmonlee": { - "level": 83, + "level": 82, "sets": [ { "role": "Fast Attacker", @@ -799,7 +799,7 @@ ] }, "ditto": { - "level": 87, + "level": 88, "sets": [ { "role": "Fast Support", @@ -950,7 +950,7 @@ ] }, "dragonair": { - "level": 86, + "level": 85, "sets": [ { "role": "Setup Sweeper", @@ -1078,7 +1078,7 @@ ] }, "ariados": { - "level": 98, + "level": 99, "sets": [ { "role": "Bulky Support", @@ -1256,7 +1256,7 @@ ] }, "murkrow": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", @@ -1576,7 +1576,7 @@ ] }, "smeargle": { - "level": 88, + "level": 89, "sets": [ { "role": "Fast Support", @@ -1596,7 +1596,7 @@ ] }, "miltank": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Attacker", @@ -1951,7 +1951,7 @@ ] }, "shedinja": { - "level": 95, + "level": 96, "sets": [ { "role": "Setup Sweeper", @@ -2163,7 +2163,7 @@ ] }, "camerupt": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Support", @@ -2394,7 +2394,7 @@ ] }, "kecleon": { - "level": 95, + "level": 96, "sets": [ { "role": "Bulky Support", @@ -2434,7 +2434,7 @@ ] }, "chimecho": { - "level": 95, + "level": 96, "sets": [ { "role": "Bulky Support", @@ -2920,7 +2920,7 @@ ] }, "wormadamsandy": { - "level": 92, + "level": 91, "sets": [ { "role": "Staller", @@ -3062,7 +3062,7 @@ { "role": "Wallbreaker", "movepool": ["hiddenpowerfighting", "shadowball", "thunderbolt", "trick"], - "abilities": ["Levitate"] + "abilities": ["Levitate"] } ] }, @@ -3433,7 +3433,7 @@ ] }, "porygonz": { - "level": 81, + "level": 80, "sets": [ { "role": "Fast Attacker", @@ -3529,7 +3529,7 @@ ] }, "rotomfan": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Attacker", @@ -3723,7 +3723,7 @@ ] }, "shaymin": { - "level": 83, + "level": 82, "sets": [ { "role": "Fast Support", @@ -4007,7 +4007,7 @@ ] }, "samurott": { - "level": 86, + "level": 87, "sets": [ { "role": "Wallbreaker", @@ -4129,7 +4129,7 @@ ] }, "zebstrika": { - "level": 86, + "level": 85, "sets": [ { "role": "Fast Attacker", @@ -4387,7 +4387,7 @@ ] }, "cofagrigus": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Support", @@ -4412,7 +4412,7 @@ ] }, "archeops": { - "level": 78, + "level": 77, "sets": [ { "role": "Fast Attacker", @@ -4463,7 +4463,7 @@ ] }, "reuniclus": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Setup", @@ -4473,7 +4473,7 @@ ] }, "swanna": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Attacker", @@ -4499,7 +4499,7 @@ ] }, "sawsbuck": { - "level": 85, + "level": 84, "sets": [ { "role": "Setup Sweeper", @@ -4647,7 +4647,7 @@ ] }, "haxorus": { - "level": 74, + "level": 75, "sets": [ { "role": "Setup Sweeper", @@ -4657,7 +4657,7 @@ ] }, "beartic": { - "level": 92, + "level": 93, "sets": [ { "role": "Wallbreaker", @@ -4875,7 +4875,7 @@ ] }, "tornadus": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Setup", @@ -4915,7 +4915,7 @@ ] }, "thundurustherian": { - "level": 77, + "level": 76, "sets": [ { "role": "Fast Attacker", diff --git a/data/random-battles/gen6/sets.json b/data/random-battles/gen6/sets.json index 26445ce53a..14380db5a2 100644 --- a/data/random-battles/gen6/sets.json +++ b/data/random-battles/gen6/sets.json @@ -25,7 +25,7 @@ ] }, "charizard": { - "level": 83, + "level": 84, "sets": [ { "role": "Bulky Attacker", @@ -224,7 +224,7 @@ ] }, "nidoking": { - "level": 82, + "level": 81, "sets": [ { "role": "Wallbreaker", @@ -297,7 +297,7 @@ ] }, "venomoth": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Setup", @@ -630,7 +630,7 @@ ] }, "electrode": { - "level": 88, + "level": 87, "sets": [ { "role": "Wallbreaker", @@ -834,7 +834,7 @@ ] }, "pinsir": { - "level": 85, + "level": 84, "sets": [ { "role": "Fast Attacker", @@ -2530,7 +2530,7 @@ ] }, "altariamega": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", @@ -2899,7 +2899,7 @@ ] }, "regirock": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Setup", @@ -3020,7 +3020,7 @@ ] }, "groudon": { - "level": 74, + "level": 73, "sets": [ { "role": "Bulky Support", @@ -3121,7 +3121,7 @@ ] }, "deoxysdefense": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Support", @@ -3323,7 +3323,7 @@ ] }, "mothim": { - "level": 94, + "level": 95, "sets": [ { "role": "Setup Sweeper", @@ -3395,7 +3395,7 @@ ] }, "ambipom": { - "level": 83, + "level": 82, "sets": [ { "role": "Fast Attacker", @@ -3519,7 +3519,7 @@ ] }, "spiritomb": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Setup", @@ -3549,7 +3549,7 @@ ] }, "garchompmega": { - "level": 76, + "level": 75, "sets": [ { "role": "Bulky Support", @@ -3735,7 +3735,7 @@ ] }, "tangrowth": { - "level": 88, + "level": 87, "sets": [ { "role": "Bulky Attacker", @@ -3792,7 +3792,7 @@ ] }, "yanmega": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", @@ -4130,7 +4130,7 @@ ] }, "cresselia": { - "level": 80, + "level": 79, "sets": [ { "role": "Bulky Setup", @@ -4155,7 +4155,7 @@ ] }, "manaphy": { - "level": 76, + "level": 77, "sets": [ { "role": "Bulky Setup", @@ -4641,7 +4641,7 @@ ] }, "audino": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Support", @@ -5127,7 +5127,7 @@ ] }, "haxorus": { - "level": 77, + "level": 76, "sets": [ { "role": "Setup Sweeper", @@ -5618,7 +5618,7 @@ ] }, "talonflame": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Attacker", diff --git a/data/random-battles/gen6megasrevisited/factory-sets.json b/data/random-battles/gen6megasrevisited/factory-sets.json deleted file mode 100644 index 12918022ce..0000000000 --- a/data/random-battles/gen6megasrevisited/factory-sets.json +++ /dev/null @@ -1,10319 +0,0 @@ -{ - "Uber": { - "klefki": { - "flags": {}, - "sets": [ - { - "species": "Klefki", - "item": "Leftovers", - "ability": "Prankster", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Spikes"], ["Thunder Wave"], ["Toxic"], ["Play Rough"]] - } - ] - }, - "zekrom": { - "flags": {}, - "sets": [ - { - "species": "Zekrom", - "item": "Choice Band", - "ability": "Teravolt", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Bolt Strike"], ["Outrage"], ["Dragon Claw"], ["Volt Switch"]] - }, - { - "species": "Zekrom", - "item": "Choice Scarf", - "ability": "Teravolt", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Lonely", - "moves": [["Bolt Strike"], ["Volt Switch"], ["Draco Meteor"], ["Outrage"]] - }, - { - "species": "Zekrom", - "item": "Choice Scarf", - "ability": "Teravolt", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Bolt Strike"], ["Volt Switch"], ["Sleep Talk"], ["Outrage"]] - }, - { - "species": "Zekrom", - "item": "Life Orb", - "ability": "Teravolt", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Lonely", - "moves": [["Bolt Strike"], ["Draco Meteor"], ["Dragon Claw"], ["Tailwind"]] - }, - { - "species": "Zekrom", - "item": "Shuca Berry", - "ability": "Teravolt", - "evs": {"hp": 132, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 124}, - "nature": "Adamant", - "moves": [["Substitute", "Outrage"], ["Hone Claws"], ["Bolt Strike"], ["Dragon Claw"]] - } - ] - }, - "yveltal": { - "flags": {}, - "sets": [ - { - "species": "Yveltal", - "item": "Choice Scarf", - "ability": "Dark Aura", - "evs": {"hp": 0, "atk": 32, "def": 4, "spa": 248, "spd": 0, "spe": 224}, - "nature": "Modest", - "moves": [["Dark Pulse"], ["Oblivion Wing"], ["Foul Play"], ["U-turn"]] - }, - { - "species": "Yveltal", - "item": "Life Orb", - "ability": "Dark Aura", - "evs": {"hp": 132, "atk": 28, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Rash", - "moves": [["Dark Pulse"], ["Oblivion Wing"], ["Sucker Punch"], ["Heat Wave"]] - }, - { - "species": "Yveltal", - "item": "Leftovers", - "ability": "Dark Aura", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Foul Play"], ["Taunt"], ["Sucker Punch"], ["Roost"]] - }, - { - "species": "Yveltal", - "item": "Leftovers", - "ability": "Dark Aura", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Bold", - "moves": [["Foul Play"], ["Taunt"], ["Toxic"], ["Roost"]] - } - ] - }, - "xerneas": { - "flags": {}, - "sets": [ - { - "species": "Xerneas", - "item": "Life Orb", - "ability": "Fairy Aura", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Mild", - "moves": [["Moonblast"], ["Close Combat"], ["Rock Slide"], ["Aromatherapy"]] - }, - { - "species": "Xerneas", - "item": "Choice Scarf", - "ability": "Fairy Aura", - "evs": {"hp": 0, "atk": 76, "def": 0, "spa": 248, "spd": 0, "spe": 184}, - "nature": "Rash", - "moves": [["Moonblast"], ["Sleep Talk"], ["Close Combat"], ["Rock Slide"]] - }, - { - "species": "Xerneas", - "item": "Leftovers", - "ability": "Fairy Aura", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Aromatherapy"], ["Rest"], ["Sleep Talk"], ["Moonblast"]] - }, - { - "species": "Xerneas", - "item": "Power Herb", - "ability": "Fairy Aura", - "evs": {"hp": 184, "atk": 0, "def": 28, "spa": 252, "spd": 0, "spe": 44}, - "nature": "Modest", - "moves": [["Geomancy"], ["Moonblast"], ["Focus Blast"], ["Thunder"]] - }, - { - "species": "Xerneas", - "item": "Power Herb", - "ability": "Fairy Aura", - "evs": {"hp": 184, "atk": 0, "def": 28, "spa": 252, "spd": 0, "spe": 44}, - "nature": "Modest", - "moves": [["Geomancy"], ["Moonblast"], ["Hidden Power Ground"], ["Thunder"]] - } - ] - }, - "tyranitar": { - "flags": {}, - "sets": [ - { - "species": "Tyranitar", - "item": "Leftovers", - "ability": "Sand Stream", - "evs": {"hp": 248, "atk": 0, "def": 96, "spa": 0, "spd": 164, "spe": 0}, - "nature": "Careful", - "moves": [["Stealth Rock"], ["Pursuit"], ["Rock Slide"], ["Thunder Wave", "Roar"]] - }, - { - "species": "Tyranitar", - "item": "Shuca Berry", - "ability": "Sand Stream", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Stealth Rock"], ["Pursuit"], ["Rock Slide"], ["Thunder Wave", "Roar"]] - }, - { - "species": "Tyranitar", - "item": "Shuca Berry", - "ability": "Sand Stream", - "evs": {"hp": 248, "atk": 72, "def": 0, "spa": 0, "spd": 188, "spe": 0}, - "nature": "Careful", - "moves": [["Stealth Rock"], ["Low Kick"], ["Rock Slide"], ["Thunder Wave", "Roar"]] - } - ] - }, - "shayminsky": { - "flags": {}, - "sets": [ - { - "species": "Shaymin-Sky", - "item": "Life Orb", - "ability": "Serene Grace", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Seed Flare"], ["Air Slash"], ["Earth Power"], ["Healing Wish"]] - }, - { - "species": "Shaymin-Sky", - "item": "Leftovers", - "ability": "Serene Grace", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Leech Seed"], ["Seed Flare"], ["Air Slash"]] - } - ] - }, - "salamence": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Salamence", - "item": "Salamencite", - "ability": "Intimidate", - "evs": {"hp": 200, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 56}, - "nature": "Adamant", - "moves": [["Double-Edge"], ["Refresh", "Earthquake"], ["Roost"], ["Dragon Dance"]] - }, - { - "species": "Salamence", - "item": "Salamencite", - "ability": "Intimidate", - "evs": {"hp": 200, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 56}, - "nature": "Adamant", - "moves": [["Return"], ["Refresh", "Earthquake"], ["Roost"], ["Dragon Dance"]], - "happiness": 255 - }, - { - "species": "Salamence", - "item": "Salamencite", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Return"], ["Earthquake"], ["Roost"], ["Dragon Dance"]], - "happiness": 255 - }, - { - "species": "Salamence", - "item": "Salamencite", - "ability": "Intimidate", - "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 0, "spe": 124}, - "nature": "Impish", - "moves": [["Return"], ["Refresh"], ["Roost"], ["Dragon Dance"]], - "happiness": 255 - } - ] - }, - "sableye": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Sableye", - "item": "Sablenite", - "ability": "Prankster", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Bold", - "moves": [["Foul Play"], ["Protect", "Fake Out"], ["Will-O-Wisp"], ["Recover"]] - } - ] - }, - "reshiram": { - "flags": {}, - "sets": [ - { - "species": "Reshiram", - "item": "Choice Scarf", - "ability": "Turboblaze", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Blue Flare"], ["Draco Meteor"], ["Sleep Talk"], ["Stone Edge"]] - }, - { - "species": "Reshiram", - "item": "Life Orb", - "ability": "Turboblaze", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Flame Charge"], ["Blue Flare"], ["Draco Meteor"], ["Stone Edge"]] - }, - { - "species": "Reshiram", - "item": "Leftovers", - "ability": "Turboblaze", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Blue Flare"], ["Draco Meteor"], ["Toxic"], ["Roost"]] - } - ] - }, - "rayquaza": { - "flags": {}, - "sets": [ - { - "species": "Rayquaza", - "item": "Life Orb", - "ability": "Air Lock", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Dragon Dance"], ["Dragon Ascent"], ["Earthquake"], ["Extreme Speed"]] - }, - { - "species": "Rayquaza", - "item": "Life Orb", - "ability": "Air Lock", - "evs": {"hp": 0, "atk": 40, "def": 0, "spa": 252, "spd": 0, "spe": 216}, - "nature": "Rash", - "moves": [["Draco Meteor"], ["Dragon Ascent"], ["Extreme Speed"], ["Earthquake"]] - }, - { - "species": "Rayquaza", - "item": "Life Orb", - "ability": "Air Lock", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Dragon Ascent"], ["Earthquake"], ["Extreme Speed"]] - } - ] - }, - "palkia": { - "flags": {}, - "sets": [ - { - "species": "Palkia", - "item": "Choice Specs", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Hydro Pump"], ["Draco Meteor"], ["Spacial Rend"], ["Fire Blast"]] - }, - { - "species": "Palkia", - "item": "Lustrous Orb", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Hydro Pump"], ["Spacial Rend"], ["Fire Blast"], ["Thunder Wave"]] - }, - { - "species": "Palkia", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Surf"], ["Toxic"], ["Rest"], ["Sleep Talk"]] - }, - { - "species": "Palkia", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 60, "atk": 0, "def": 0, "spa": 196, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Rest"], ["Toxic"], ["Hydro Pump"], ["Spacial Rend"]] - } - ] - }, - "mewtwo": { - "flags": {}, - "sets": [ - { - "species": "Mewtwo", - "item": "Mewtwonite X", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Ice Beam"], ["Low Kick"], ["Earthquake"], ["Rock Slide"]] - }, - { - "species": "Mewtwo", - "item": "Mewtwonite X", - "ability": "Pressure", - "evs": {"hp": 176, "atk": 80, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Low Kick"], ["Taunt"], ["Earthquake"], ["Ice Beam"]] - }, - { - "species": "Mewtwo", - "item": "Life Orb", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Psystrike"], ["Calm Mind"], ["Ice Beam"], ["Focus Blast"]] - }, - { - "species": "Mewtwo", - "item": "Mewtwonite Y", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Psystrike"], ["Calm Mind"], ["Ice Beam"], ["Focus Blast"]] - } - ] - }, - "mawile": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Mawile", - "item": "Mawilite", - "ability": "Intimidate", - "evs": {"hp": 248, "atk": 16, "def": 0, "spa": 0, "spd": 244, "spe": 0}, - "nature": "Adamant", - "moves": [["Iron Head"], ["Play Rough"], ["Sucker Punch"], ["Baton Pass"]] - } - ] - }, - "lugia": { - "flags": {}, - "sets": [ - { - "species": "Lugia", - "item": "Leftovers", - "ability": "Multiscale", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8}, - "nature": "Bold", - "moves": [["Roost"], ["Ice Beam"], ["Whirlwind"], ["Toxic"]] - } - ] - }, - "lucario": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Lucario", - "item": "Lucarionite", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Close Combat"], ["Bullet Punch"], ["Stone Edge"], ["Iron Tail"]] - } - ] - }, - "latios": { - "flags": {}, - "sets": [ - { - "species": "Latios", - "item": "Soul Dew", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Psyshock"], ["Defog"], ["Memento", "Recover"]] - }, - { - "species": "Latios", - "item": "Soul Dew", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Psyshock"], ["Defog"], ["Hidden Power Fire"]] - }, - { - "species": "Latios", - "item": "Soul Dew", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Psyshock"], ["Calm Mind"], ["Memento", "Recover"]] - }, - { - "species": "Latios", - "item": "Soul Dew", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Psyshock"], ["Calm Mind"], ["Hidden Power Fire"]] - } - ] - }, - "latias": { - "flags": {}, - "sets": [ - { - "species": "Latias", - "item": "Soul Dew", - "ability": "Levitate", - "evs": {"hp": 212, "atk": 0, "def": 0, "spa": 120, "spd": 0, "spe": 176}, - "nature": "Timid", - "moves": [["Defog"], ["Draco Meteor"], ["Psyshock"], ["Recover", "Healing Wish"]] - }, - { - "species": "Latias", - "item": "Soul Dew", - "ability": "Levitate", - "evs": {"hp": 80, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 176}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Draco Meteor"], ["Psyshock"], ["Recover"]] - } - ] - }, - "kyuremwhite": { - "flags": {}, - "sets": [ - { - "species": "Kyurem-White", - "item": "Choice Specs", - "ability": "Turboblaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Ice Beam"], ["Fusion Flare"], ["Earth Power"]] - }, - { - "species": "Kyurem-White", - "item": "Life Orb", - "ability": "Turboblaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Ice Beam"], ["Fusion Flare"], ["Stone Edge"]] - } - ] - }, - "kyogre": { - "flags": {}, - "sets": [ - { - "species": "Kyogre", - "item": "Blue Orb", - "ability": "Drizzle", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Origin Pulse"], ["Thunder"], ["Ice Beam"], ["Calm Mind"]] - }, - { - "species": "Kyogre", - "item": "Blue Orb", - "ability": "Drizzle", - "evs": {"hp": 248, "atk": 0, "def": 248, "spa": 0, "spd": 0, "spe": 12}, - "nature": "Bold", - "moves": [["Rest"], ["Sleep Talk"], ["Scald"], ["Ice Beam", "Roar"]] - }, - { - "species": "Kyogre", - "item": "Blue Orb", - "ability": "Drizzle", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 248, "spd": 0, "spe": 12}, - "nature": "Modest", - "moves": [["Origin Pulse"], ["Thunder", "Rest", "Substitute"], ["Ice Beam"], ["Calm Mind"]] - }, - { - "species": "Kyogre", - "item": "Choice Specs", - "ability": "Drizzle", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Water Spout"], ["Origin Pulse", "Scald"], ["Ice Beam"], ["Thunder"]] - }, - { - "species": "Kyogre", - "item": "Choice Scarf", - "ability": "Drizzle", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Water Spout"], ["Ice Beam"], ["Origin Pulse"], ["Thunder", "Sleep Talk"]] - } - ] - }, - "kangaskhan": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Kangaskhan", - "item": "Kangaskhanite", - "ability": "Scrappy", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Return"], ["Fake Out"], ["Power-Up Punch"], ["Crunch"]], - "happiness": 255 - }, - { - "species": "Kangaskhan", - "item": "Kangaskhanite", - "ability": "Scrappy", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Double-Edge"], ["Fake Out"], ["Sucker Punch"], ["Low Kick"]] - }, - { - "species": "Kangaskhan", - "item": "Kangaskhanite", - "ability": "Scrappy", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Return"], ["Fake Out"], ["Sucker Punch"], ["Low Kick"]], - "happiness": 255 - } - ] - }, - "hooh": { - "flags": {}, - "sets": [ - { - "species": "Ho-Oh", - "item": "Choice Band", - "ability": "Regenerator", - "evs": {"hp": 248, "atk": 208, "def": 0, "spa": 0, "spd": 52, "spe": 0}, - "nature": "Adamant", - "moves": [["Brave Bird"], ["Sacred Fire"], ["Earthquake"], ["Sleep Talk"]] - }, - { - "species": "Ho-Oh", - "item": "Life Orb", - "ability": "Regenerator", - "evs": {"hp": 248, "atk": 208, "def": 0, "spa": 0, "spd": 52, "spe": 0}, - "nature": "Adamant", - "moves": [["Brave Bird"], ["Sacred Fire"], ["Recover"], ["Thunder Wave", "Earthquake", "Substitute"]] - } - ] - }, - "groudon": { - "flags": {}, - "sets": [ - { - "species": "Groudon", - "item": "Red Orb", - "ability": "Drought", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 200, "spe": 56}, - "nature": "Adamant", - "moves": [["Rock Polish"], ["Precipice Blades", "Earthquake"], ["Stone Edge"], ["Swords Dance", "Dragon Claw"]] - }, - { - "species": "Groudon", - "item": "Red Orb", - "ability": "Drought", - "evs": {"hp": 248, "atk": 0, "def": 56, "spa": 0, "spd": 192, "spe": 12}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Precipice Blades", "Earthquake"], ["Lava Plume", "Stone Edge"], ["Thunder Wave", "Roar"]] - }, - { - "species": "Groudon", - "item": "Red Orb", - "ability": "Drought", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Lava Plume"], ["Roar"], ["Rest"], ["Sleep Talk"]] - }, - { - "species": "Groudon", - "item": "Leftovers", - "ability": "Drought", - "evs": {"hp": 248, "atk": 0, "def": 248, "spa": 0, "spd": 0, "spe": 12}, - "nature": "Impish", - "moves": [["Precipice Blades"], ["Stealth Rock"], ["Stone Edge"], ["Dragon Tail", "Roar"]] - } - ] - }, - "greninja": { - "flags": {}, - "sets": [ - { - "species": "Greninja", - "item": "Focus Sash", - "ability": "Protean", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Toxic Spikes"], ["Spikes"], ["Taunt"], ["Shadow Sneak"]] - }, - { - "species": "Greninja", - "item": "Focus Sash", - "ability": "Protean", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Toxic Spikes"], ["Scald"], ["Taunt"], ["Shadow Sneak"]] - } - ] - }, - "giratina": { - "flags": {}, - "sets": [ - { - "species": "Giratina", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Rest"], ["Sleep Talk"], ["Will-O-Wisp"], ["Roar"]] - }, - { - "species": "Giratina", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Rest"], ["Sleep Talk"], ["Will-O-Wisp"], ["Roar"]] - } - ] - }, - "giratinaorigin": { - "flags": {}, - "sets": [ - { - "species": "Giratina-Origin", - "item": "Griseous Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 180, "def": 0, "spa": 252, "spd": 0, "spe": 76}, - "nature": "Rash", - "moves": [["Draco Meteor"], ["Shadow Sneak"], ["Dragon Tail"], ["Defog"]] - }, - { - "species": "Giratina-Origin", - "item": "Griseous Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 244, "def": 252, "spa": 0, "spd": 0, "spe": 12}, - "nature": "Adamant", - "moves": [["Defog"], ["Shadow Sneak"], ["Dragon Tail"], ["Shadow Force"]] - } - ] - }, - "gengar": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Gengar", - "item": "Gengarite", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Taunt"], ["Destiny Bond"], ["Sludge Wave"], ["Focus Blast"]] - }, - { - "species": "Gengar", - "item": "Gengarite", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 84, "spe": 176}, - "nature": "Timid", - "moves": [["Perish Song"], ["Taunt"], ["Protect"], ["Disable"]] - } - ] - }, - "genesect": { - "flags": {}, - "sets": [ - { - "species": "Genesect", - "item": "Choice Scarf", - "ability": "Download", - "evs": {"hp": 0, "atk": 248, "def": 0, "spa": 8, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["U-turn"], ["Iron Head"], ["Explosion"], ["Ice Beam"]] - } - ] - }, - "ferrothorn": { - "flags": {}, - "sets": [ - { - "species": "Ferrothorn", - "item": "Leftovers", - "ability": "Iron Barbs", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Leech Seed"], ["Spikes"], ["Power Whip", "Gyro Ball"], ["Protect"]] - }, - { - "species": "Ferrothorn", - "item": "Leftovers", - "ability": "Iron Barbs", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Leech Seed"], ["Spikes"], ["Power Whip"], ["Protect", "Gyro Ball"]] - } - ] - }, - "excadrill": { - "flags": {}, - "sets": [ - { - "species": "Excadrill", - "item": "Life Orb", - "ability": "Sand Rush", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Iron Head"], ["Earthquake"], ["Rock Slide"], ["Rapid Spin"]] - }, - { - "species": "Excadrill", - "item": "Air Balloon", - "ability": "Sand Rush", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Iron Head"], ["Earthquake"], ["Swords Dance"], ["Rapid Spin"]] - } - ] - }, - "dialga": { - "flags": {}, - "sets": [ - { - "species": "Dialga", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Stealth Rock"], ["Toxic"], ["Draco Meteor"], ["Fire Blast"]] - }, - { - "species": "Dialga", - "item": "Shuca Berry", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Flash Cannon"], ["Fire Blast"], ["Stealth Rock"]] - } - ] - }, - "deoxys": { - "flags": {}, - "sets": [ - { - "species": "Deoxys", - "item": "Focus Sash", - "ability": "Pressure", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Psycho Boost"], ["Stealth Rock"], ["Spikes"], ["Taunt"]] - } - ] - }, - "deoxysattack": { - "flags": {}, - "sets": [ - { - "species": "Deoxys-Attack", - "item": "Life Orb", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Psycho Boost"], ["Low Kick"], ["Ice Beam"], ["Extreme Speed"]] - }, - { - "species": "Deoxys-Attack", - "item": "Focus Sash", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Spikes"], ["Psycho Boost"], ["Knock Off"], ["Extreme Speed"]] - } - ] - }, - "deoxysdefense": { - "flags": {}, - "sets": [ - { - "species": "Deoxys-Defense", - "item": "Mental Herb", - "ability": "Pressure", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Recover"], ["Spikes"], ["Skill Swap"], ["Toxic"]] - } - ] - }, - "deoxysspeed": { - "flags": {}, - "sets": [ - { - "species": "Deoxys-Speed", - "item": "Focus Sash", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Stealth Rock"], ["Taunt"], ["Spikes"], ["Knock Off"]] - }, - { - "species": "Deoxys-Speed", - "item": "Light Clay", - "ability": "Pressure", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Stealth Rock"], ["Taunt"], ["Reflect"], ["Light Screen"]] - } - ] - }, - "darkrai": { - "flags": {}, - "sets": [ - { - "species": "Darkrai", - "item": "Life Orb", - "ability": "Bad Dreams", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Dark Void"], ["Dark Pulse"], ["Nasty Plot", "Taunt"], ["Sludge Bomb", "Thunder", "Focus Blast"]] - } - ] - }, - "blissey": { - "flags": {}, - "sets": [ - { - "species": "Blissey", - "item": "Leftovers", - "ability": "Natural Cure", - "evs": {"hp": 20, "atk": 0, "def": 236, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Ice Beam"], ["Toxic"], ["Soft-Boiled", "Wish"], ["Heal Bell", "Protect"]] - }, - { - "species": "Blissey", - "item": "Shed Shell", - "ability": "Natural Cure", - "evs": {"hp": 20, "atk": 0, "def": 236, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Toxic"], ["Seismic Toss", "Snatch"], ["Soft-Boiled", "Wish"], ["Heal Bell", "Protect"]] - } - ] - }, - "blaziken": { - "flags": {}, - "sets": [ - { - "species": "Blaziken", - "item": "Leftovers", - "ability": "Speed Boost", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Baton Pass"], ["Protect"], ["Swords Dance"], ["Flare Blitz"]] - }, - { - "species": "Blaziken", - "item": "Blazikenite", - "ability": "Speed Boost", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Stone Edge", "Knock Off"]] - }, - { - "species": "Blaziken", - "item": "Blazikenite", - "ability": "Speed Boost", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Hidden Power Ice"]] - }, - { - "species": "Blaziken", - "item": "Life Orb", - "ability": "Speed Boost", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Hidden Power Ice"]] - }, - { - "species": "Blaziken", - "item": "Life Orb", - "ability": "Speed Boost", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Stone Edge", "Knock Off"]] - } - ] - }, - "arceuswater": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Water", - "item": "Splash Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56}, - "nature": "Bold", - "moves": [["Ice Beam", "Judgment"], ["Defog"], ["Recover"], ["Toxic"]] - } - ] - }, - "arceussteel": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Steel", - "item": "Iron Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 84, "spd": 0, "spe": 176}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Earth Power", "Thunder"]] - }, - { - "species": "Arceus-Steel", - "item": "Iron Plate", - "ability": "Multitype", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Iron Head"], ["Earthquake"], ["Stone Edge", "Recover", "Extreme Speed"]] - } - ] - }, - "arceusfire": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Fire", - "item": "Flame Plate", - "ability": "Multitype", - "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 56}, - "nature": "Modest", - "moves": [["Overheat", "Fire Blast"], ["Calm Mind"], ["Thunder"], ["Earth Power"]] - } - ] - }, - "arceusflying": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Flying", - "item": "Sky Plate", - "ability": "Multitype", - "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 200, "spd": 0, "spe": 176}, - "nature": "Timid", - "moves": [["Judgment"], ["Calm Mind"], ["Recover"], ["Refresh", "Earth Power", "Substitute"]] - } - ] - }, - "arceuspsychic": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Psychic", - "item": "Mind Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56}, - "nature": "Bold", - "moves": [["Fire Blast", "Payback"], ["Ice Beam"], ["Recover"], ["Toxic"]] - } - ] - }, - "arceuspoison": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Poison", - "item": "Toxic Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56}, - "nature": "Impish", - "moves": [["Defog"], ["Poison Jab"], ["Thunder Wave"], ["Recover"]] - } - ] - }, - "arceusbug": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Bug", - "item": "Insect Plate", - "ability": "Multitype", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["X-Scissor"], ["Stone Edge"], ["Earthquake"]] - } - ] - }, - "arceusfighting": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Fighting", - "item": "Fist Plate", - "ability": "Multitype", - "evs": {"hp": 0, "atk": 0, "def": 40, "spa": 252, "spd": 0, "spe": 216}, - "nature": "Modest", - "moves": [["Judgment"], ["Thunder Wave"], ["Recover"], ["Ice Beam", "Stone Edge"]] - } - ] - }, - "arceusfairy": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Fairy", - "item": "Pixie Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56}, - "nature": "Bold", - "moves": [["Judgment"], ["Recover"], ["Defog"], ["Toxic"]] - }, - { - "species": "Arceus-Fairy", - "item": "Pixie Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Judgment"], ["Calm Mind"], ["Recover"], ["Earth Power", "Thunder"]] - } - ] - }, - "arceusice": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Ice", - "item": "Icicle Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Judgment"], ["Recover"], ["Calm Mind"], ["Thunder", "Fire Blast"]] - } - ] - }, - "arceusrock": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Rock", - "item": "Stone Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Judgment"], ["Defog"], ["Recover"], ["Will-O-Wisp"]] - } - ] - }, - "arceusghost": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Ghost", - "item": "Spooky Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Will-O-Wisp"]] - }, - { - "species": "Arceus-Ghost", - "item": "Spooky Plate", - "ability": "Multitype", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Shadow Force"], ["Shadow Claw", "Brick Break"], ["Extreme Speed"]] - }, - { - "species": "Arceus-Ghost", - "item": "Spooky Plate", - "ability": "Multitype", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Shadow Force"], ["Shadow Claw"], ["Brick Break"]] - } - ] - }, - "arceusdragon": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Dragon", - "item": "Draco Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56}, - "nature": "Bold", - "moves": [["Judgment"], ["Defog"], ["Recover"], ["Toxic"]] - }, - { - "species": "Arceus-Dragon", - "item": "Draco Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 84, "spd": 0, "spe": 176}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Judgment"], ["Fire Blast"], ["Recover"]] - } - ] - }, - "arceus": { - "flags": {}, - "sets": [ - { - "species": "Arceus", - "item": "Life Orb", - "ability": "Multitype", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Extreme Speed"], ["Earthquake"], ["Stone Edge", "Shadow Claw"]] - }, - { - "species": "Arceus", - "item": "Silk Scarf", - "ability": "Multitype", - "evs": {"hp": 200, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 56}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Extreme Speed"], ["Earthquake", "Shadow Force"], ["Refresh"]] - } - ] - }, - "arceusdark": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Dark", - "item": "Dread Plate", - "ability": "Multitype", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 144, "spe": 112}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Refresh"]] - } - ] - }, - "arceusgrass": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Grass", - "item": "Meadow Plate", - "ability": "Multitype", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 148, "spe": 112}, - "nature": "Timid", - "moves": [["Grass Knot"], ["Recover"], ["Ice Beam"], ["Defog"]] - } - ] - }, - "arceuselectric": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Electric", - "item": "Zap Plate", - "ability": "Multitype", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Judgment"], ["Ice Beam"], ["Recover"]] - } - ] - }, - "arceusground": { - "flags": {}, - "sets": [ - { - "species": "Arceus-Ground", - "item": "Earth Plate", - "ability": "Multitype", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Earthquake"], ["Stone Edge"], ["Recover", "Extreme Speed"]] - } - ] - }, - "aegislash": { - "flags": {}, - "sets": [ - { - "species": "Aegislash", - "item": "Leftovers", - "ability": "Stance Change", - "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Sassy", - "moves": [["King's Shield"], ["Toxic"], ["Gyro Ball"], ["Pursuit"]] - } - ] - }, - "scizor": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Scizor", - "item": "Scizorite", - "ability": "Technician", - "evs": {"hp": 212, "atk": 60, "def": 152, "spa": 0, "spd": 84, "spe": 0}, - "nature": "Impish", - "moves": [["Toxic"], ["Roost"], ["Defog"], ["Bullet Punch"]] - } - ] - }, - "diancie": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Diancie", - "item": "Diancite", - "ability": "Clear Body", - "evs": {"hp": 0, "atk": 68, "def": 0, "spa": 188, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power", "Protect"], ["Stealth Rock"]] - }, - { - "species": "Diancie", - "item": "Diancite", - "ability": "Clear Body", - "evs": {"hp": 0, "atk": 68, "def": 0, "spa": 188, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power"], ["Protect"]] - } - ] - }, - "landorus": { - "flags": {}, - "sets": [ - { - "species": "Landorus", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Knock Off"], ["Earth Power"], ["Rock Slide"], ["Sludge Wave"]] - }, - { - "species": "Landorus", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Knock Off"], ["Earth Power"], ["Rock Slide"], ["Hidden Power Ice"]] - } - ] - } - }, - "OU": { - "diancie": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Diancie", - "item": "Diancite", - "ability": "Clear Body", - "evs": {"hp": 44, "atk": 32, "def": 0, "spa": 252, "spd": 0, "spe": 180}, - "nature": "Rash", - "moves": [["Moonblast"], ["Diamond Storm"], ["Earth Power"], ["Rock Polish"]] - }, - { - "species": "Diancie", - "item": "Diancite", - "ability": "Clear Body", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Moonblast"], ["Earth Power"], ["Hidden Power Fire"]] - }, - { - "species": "Diancie", - "item": "Diancite", - "ability": "Clear Body", - "evs": {"hp": 0, "atk": 32, "def": 0, "spa": 224, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power"], ["Protect"]] - } - ] - }, - "hippowdon": { - "flags": {}, - "sets": [ - { - "species": "Hippowdon", - "gender": "M", - "item": "Leftovers", - "ability": "Sand Stream", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Impish", - "moves": [["Slack Off"], ["Stealth Rock"], ["Stone Edge"], ["Earthquake"]] - }, - { - "species": "Hippowdon", - "gender": "M", - "item": "Leftovers", - "ability": "Sand Stream", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Slack Off"], ["Stealth Rock"], ["Stone Edge"], ["Earthquake"]] - }, - { - "species": "Hippowdon", - "gender": "M", - "item": "Leftovers", - "ability": "Sand Stream", - "evs": {"hp": 252, "atk": 0, "def": 144, "spa": 0, "spd": 112, "spe": 0}, - "nature": "Careful", - "moves": [["Slack Off"], ["Stealth Rock"], ["Whirlwind"], ["Earthquake"]] - } - ] - }, - "jirachi": { - "flags": {}, - "sets": [ - { - "species": "Jirachi", - "item": "Leftovers", - "ability": "Serene Grace", - "evs": {"hp": 252, "atk": 160, "def": 0, "spa": 0, "spd": 0, "spe": 96}, - "nature": "Jolly", - "moves": [["Iron Head"], ["Fire Punch"], ["Substitute"], ["Toxic"]] - }, - { - "species": "Jirachi", - "item": "Leftovers", - "ability": "Serene Grace", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 224, "spe": 32}, - "nature": "Careful", - "moves": [["Wish"], ["Protect"], ["Iron Head"], ["Body Slam"]] - }, - { - "species": "Jirachi", - "item": "Choice Scarf", - "ability": "Serene Grace", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["U-turn"], ["Iron Head"], ["Ice Punch"], ["Fire Punch"]] - } - ] - }, - "celebi": { - "flags": {}, - "sets": [ - { - "species": "Celebi", - "item": "Leftovers", - "ability": "Natural Cure", - "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 0, "spd": 0, "spe": 108}, - "nature": "Bold", - "moves": [["Earth Power"], ["Nasty Plot"], ["Giga Drain"], ["Recover"]] - }, - { - "species": "Celebi", - "item": "Leftovers", - "ability": "Natural Cure", - "evs": {"hp": 252, "atk": 0, "def": 156, "spa": 0, "spd": 84, "spe": 16}, - "nature": "Bold", - "moves": [["Thunder Wave"], ["Recover"], ["Giga Drain"], ["Stealth Rock"]] - } - ] - }, - "zygarde": { - "flags": {}, - "sets": [ - { - "species": "Zygarde", - "item": "Life Orb", - "ability": "Aura Break", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Dragon Dance"], ["Earthquake"], ["Outrage"], ["Extreme Speed"]] - }, - { - "species": "Zygarde", - "item": "Leftovers", - "ability": "Aura Break", - "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 0, "spd": 252, "spe": 56}, - "nature": "Careful", - "moves": [["Substitute"], ["Coil"], ["Earthquake"], ["Dragon Tail"]] - } - ] - }, - "weavile": { - "flags": {}, - "sets": [ - { - "species": "Weavile", - "item": "Life Orb", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Ice Punch"], ["Knock Off"], ["Ice Shard"], ["Low Kick"]] - }, - { - "species": "Weavile", - "item": "Life Orb", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Pursuit"], ["Knock Off"], ["Ice Shard"], ["Icicle Crash"]] - } - ] - }, - "volcarona": { - "flags": {}, - "sets": [ - { - "species": "Volcarona", - "item": "Leftovers", - "ability": "Flame Body", - "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 0, "spe": 124}, - "nature": "Bold", - "moves": [["Quiver Dance"], ["Fiery Dance"], ["Giga Drain"], ["Roost"]] - }, - { - "species": "Volcarona", - "item": "Lum Berry", - "ability": "Flame Body", - "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160}, - "nature": "Modest", - "moves": [["Quiver Dance"], ["Fire Blast"], ["Giga Drain"], ["Bug Buzz"]] - } - ] - }, - "victini": { - "flags": {}, - "sets": [ - { - "species": "Victini", - "item": "Choice Band", - "ability": "Victory Star", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["V-create"], ["Bolt Strike"], ["Brick Break"], ["U-turn"]] - }, - { - "species": "Victini", - "item": "Choice Scarf", - "ability": "Victory Star", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["V-create"], ["Bolt Strike"], ["U-turn"], ["Final Gambit"]] - }, - { - "species": "Victini", - "item": "Expert Belt", - "ability": "Victory Star", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Blue Flare"], ["Thunder"], ["Glaciate"], ["Focus Blast"]] - }, - { - "species": "Victini", - "item": "Leftovers", - "ability": "Victory Star", - "evs": {"hp": 248, "atk": 32, "def": 68, "spa": 0, "spd": 0, "spe": 160}, - "nature": "Adamant", - "moves": [["Taunt"], ["V-create"], ["Will-O-Wisp"], ["Bolt Strike"]] - }, - { - "species": "Victini", - "item": "Leftovers", - "ability": "Victory Star", - "evs": {"hp": 96, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 160}, - "nature": "Adamant", - "moves": [["Substitute"], ["V-create"], ["Bolt Strike"], ["Power-Up Punch"]] - } - ] - }, - "tornadustherian": { - "flags": {}, - "sets": [ - { - "species": "Tornadus-Therian", - "item": "Assault Vest", - "ability": "Regenerator", - "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 160, "spd": 0, "spe": 216}, - "nature": "Timid", - "moves": [["Hurricane"], ["Focus Blast"], ["Knock Off"], ["U-turn"]] - }, - { - "species": "Tornadus-Therian", - "item": "Life Orb", - "ability": "Regenerator", - "evs": {"hp": 0, "atk": 76, "def": 0, "spa": 216, "spd": 0, "spe": 216}, - "nature": "Naive", - "moves": [["Hurricane"], ["Superpower"], ["U-turn"], ["Taunt"]] - } - ] - }, - "togekiss": { - "flags": {}, - "sets": [ - { - "species": "Togekiss", - "item": "Lum Berry", - "ability": "Serene Grace", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Nasty Plot"], ["Air Slash"], ["Aura Sphere"], ["Roost"]] - }, - { - "species": "Togekiss", - "item": "Leftovers", - "ability": "Serene Grace", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Thunder Wave"], ["Air Slash"], ["Defog"], ["Roost"]] - } - ] - }, - "staraptor": { - "flags": {}, - "sets": [ - { - "species": "Staraptor", - "item": "Choice Band", - "ability": "Reckless", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Brave Bird"], ["Close Combat"], ["U-turn"], ["Double-Edge"]] - }, - { - "species": "Staraptor", - "item": "Choice Scarf", - "ability": "Reckless", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Brave Bird"], ["Double-Edge"], ["Close Combat"], ["U-turn"]] - } - ] - }, - "thundurustherian": { - "flags": {}, - "sets": [ - { - "species": "Thundurus-Therian", - "item": "Leftovers", - "ability": "Volt Absorb", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]] - }, - { - "species": "Thundurus-Therian", - "item": "Choice Scarf", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"], ["U-turn"]] - }, - { - "species": "Thundurus-Therian", - "item": "Leftovers", - "ability": "Volt Absorb", - "evs": {"hp": 128, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 128}, - "nature": "Modest", - "moves": [["Agility"], ["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"]] - } - ] - }, - "scolipede": { - "flags": {}, - "sets": [ - { - "species": "Scolipede", - "item": "Life Orb", - "ability": "Speed Boost", - "evs": {"hp": 16, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 236}, - "nature": "Adamant", - "moves": [["Megahorn"], ["Earthquake"], ["Poison Jab"], ["Protect"]] - } - ] - }, - "medicham": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Medicham", - "item": "Medichamite", - "ability": "Pure Power", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["High Jump Kick"], ["Zen Headbutt"], ["Fake Out"], ["Ice Punch"]] - } - ] - }, - "manaphy": { - "flags": {}, - "sets": [ - { - "species": "Manaphy", - "item": "Leftovers", - "ability": "Hydration", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16}, - "nature": "Bold", - "moves": [["Calm Mind"], ["Rest"], ["Rain Dance"], ["Scald"]] - }, - { - "species": "Manaphy", - "item": "Leftovers", - "ability": "Hydration", - "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160}, - "nature": "Timid", - "moves": [["Tail Glow"], ["Surf"], ["Ice Beam"], ["Energy Ball"]] - }, - { - "species": "Manaphy", - "item": "Leftovers", - "ability": "Hydration", - "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160}, - "nature": "Timid", - "moves": [["Tail Glow"], ["Rain Dance"], ["Scald"], ["Psychic"]] - } - ] - }, - "klefki": { - "flags": {}, - "sets": [ - { - "species": "Klefki", - "item": "Light Clay", - "ability": "Prankster", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Bold", - "moves": [["Reflect"], ["Light Screen"], ["Spikes"], ["Foul Play"]] - }, - { - "species": "Klefki", - "item": "Leftovers", - "ability": "Prankster", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Thunder Wave"], ["Magnet Rise"], ["Spikes"], ["Play Rough"]] - } - ] - }, - "hawlucha": { - "flags": {}, - "sets": [ - { - "species": "Hawlucha", - "item": "Sitrus Berry", - "ability": "Unburden", - "evs": {"hp": 12, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 244}, - "nature": "Jolly", - "moves": [["Substitute"], ["Swords Dance"], ["High Jump Kick"], ["Acrobatics"]] - }, - { - "species": "Hawlucha", - "item": "Power Herb", - "ability": "Unburden", - "evs": {"hp": 12, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 244}, - "nature": "Jolly", - "moves": [["Sky Attack"], ["Swords Dance"], ["High Jump Kick"], ["Acrobatics"]] - } - ] - }, - "diggersby": { - "flags": {}, - "sets": [ - { - "species": "Diggersby", - "item": "Choice Scarf", - "ability": "Huge Power", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Return"], ["Earthquake"], ["Fire Punch"], ["U-turn"]], - "happiness": 255 - }, - { - "species": "Diggersby", - "item": "Focus Sash", - "ability": "Huge Power", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Earthquake"], ["Return"], ["Quick Attack"]], - "happiness": 255 - }, - { - "species": "Diggersby", - "item": "Life Orb", - "ability": "Huge Power", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Earthquake"], ["Return"], ["Quick Attack"]], - "happiness": 255 - }, - { - "species": "Diggersby", - "item": "Focus Sash", - "ability": "Huge Power", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Earthquake"], ["Return"], ["Fire Punch"]], - "happiness": 255 - } - ] - }, - "crawdaunt": { - "flags": {}, - "sets": [ - { - "species": "Crawdaunt", - "item": "Life Orb", - "ability": "Adaptability", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Swords Dance"]] - }, - { - "species": "Crawdaunt", - "item": "Choice Band", - "ability": "Adaptability", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Crunch"]] - } - ] - }, - "alakazam": { - "flags": {}, - "sets": [ - { - "species": "Alakazam", - "item": "Focus Sash", - "ability": "Magic Guard", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Psychic"], ["Shadow Ball"], ["Hidden Power Ice"], ["Thunder Wave"]] - }, - { - "species": "Alakazam", - "item": "Life Orb", - "ability": "Magic Guard", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Psychic"], ["Shadow Ball"], ["Focus Blast"], ["Encore"]] - }, - { - "species": "Alakazam", - "item": "Life Orb", - "ability": "Magic Guard", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Psychic"], ["Shadow Ball"], ["Focus Blast"], ["Hidden Power Ice"]] - }, - { - "species": "Alakazam", - "item": "Alakazite", - "ability": "Magic Guard", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Psychic"], ["Shadow Ball"], ["Focus Blast"], ["Encore"]] - } - ] - }, - "zapdos": { - "flags": {}, - "sets": [ - { - "species": "Zapdos", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 252, "atk": 0, "def": 168, "spa": 68, "spd": 0, "spe": 20}, - "nature": "Bold", - "moves": [["Thunderbolt"], ["Roost"], ["Defog"], ["Heat Wave"]] - } - ] - }, - "venusaur": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Venusaur", - "item": "Venusaurite", - "ability": "Chlorophyll", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16}, - "nature": "Bold", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Leech Seed"]] - }, - { - "species": "Venusaur", - "item": "Venusaurite", - "ability": "Chlorophyll", - "evs": {"hp": 232, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 20}, - "nature": "Modest", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fire"], ["Synthesis"]] - } - ] - }, - "tyranitar": { - "flags": {}, - "sets": [ - { - "species": "Tyranitar", - "item": "Choice Scarf", - "ability": "Sand Stream", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Pursuit"], ["Crunch"], ["Stone Edge"], ["Superpower"]] - }, - { - "species": "Tyranitar", - "item": "Tyranitarite", - "ability": "Sand Stream", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Stone Edge"], ["Superpower"], ["Ice Punch"]] - }, - { - "species": "Tyranitar", - "item": "Leftovers", - "ability": "Sand Stream", - "evs": {"hp": 248, "atk": 0, "def": 80, "spa": 0, "spd": 180, "spe": 0}, - "nature": "Relaxed", - "moves": [["Stealth Rock"], ["Stone Edge"], ["Ice Beam"], ["Pursuit"]] - }, - { - "species": "Tyranitar", - "item": "Choice Band", - "ability": "Sand Stream", - "evs": {"hp": 100, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 156}, - "nature": "Adamant", - "moves": [["Pursuit"], ["Crunch"], ["Stone Edge"], ["Superpower"]] - } - ] - }, - "thundurus": { - "flags": {}, - "sets": [ - { - "species": "Thundurus", - "item": "Life Orb", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 76, "def": 0, "spa": 180, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Thunderbolt"], ["Knock Off"], ["Superpower"], ["Hidden Power Ice"]] - }, - { - "species": "Thundurus", - "item": "Leftovers", - "ability": "Prankster", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]] - }, - { - "species": "Thundurus", - "item": "Life Orb", - "ability": "Prankster", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunder Wave"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]] - } - ] - }, - "terrakion": { - "flags": {}, - "sets": [ - { - "species": "Terrakion", - "item": "Choice Scarf", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Close Combat"], ["Stone Edge"], ["X-Scissor"], ["Rock Slide"]] - }, - { - "species": "Terrakion", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Close Combat"], ["Stone Edge"], ["Swords Dance"], ["Hidden Power Ice"]] - }, - { - "species": "Terrakion", - "item": "Focus Sash", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Stealth Rock"], ["Close Combat"], ["Stone Edge"], ["Taunt"]] - }, - { - "species": "Terrakion", - "item": "Lum Berry", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Rock Polish"], ["Stone Edge"], ["Close Combat"]] - } - ] - }, - "talonflame": { - "flags": {}, - "sets": [ - { - "species": "Talonflame", - "ability": "Gale Wings", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Bulk Up"], ["Acrobatics"], ["Roost"], ["Taunt"]] - }, - { - "species": "Talonflame", - "item": "Choice Band", - "ability": "Gale Wings", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Brave Bird"], ["Flare Blitz"], ["U-turn"], ["Steel Wing"]] - }, - { - "species": "Talonflame", - "ability": "Gale Wings", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Acrobatics"], ["Taunt"], ["Roost"], ["Will-O-Wisp"]] - }, - { - "species": "Talonflame", - "item": "Sharp Beak", - "ability": "Gale Wings", - "evs": {"hp": 88, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 168}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Brave Bird"], ["Flare Blitz"], ["Roost"]] - }, - { - "species": "Talonflame", - "item": "Liechi Berry", - "ability": "Gale Wings", - "evs": {"hp": 88, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 168}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Natural Gift"], ["Brave Bird"], ["Flare Blitz"]] - }, - { - "species": "Talonflame", - "ability": "Gale Wings", - "evs": {"hp": 248, "atk": 252, "def": 8, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Acrobatics"], ["Will-O-Wisp"], ["Roost"]] - } - ] - }, - "sylveon": { - "flags": {}, - "sets": [ - { - "species": "Sylveon", - "item": "Choice Specs", - "ability": "Pixilate", - "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 12}, - "nature": "Modest", - "moves": [["Hyper Voice"], ["Psyshock"], ["Shadow Ball"], ["Hidden Power Ground"]] - } - ] - }, - "slowbro": { - "flags": {}, - "sets": [ - { - "species": "Slowbro", - "item": "Slowbronite", - "ability": "Regenerator", - "evs": {"hp": 252, "atk": 0, "def": 80, "spa": 0, "spd": 176, "spe": 0}, - "nature": "Bold", - "moves": [["Scald"], ["Calm Mind"], ["Slack Off"], ["Psyshock"]] - }, - { - "species": "Slowbro", - "item": "Slowbronite", - "ability": "Regenerator", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0}, - "nature": "Modest", - "moves": [["Fire Blast"], ["Scald"], ["Psyshock"], ["Slack Off"]] - }, - { - "species": "Slowbro", - "item": "Leftovers", - "ability": "Regenerator", - "evs": {"hp": 252, "atk": 0, "def": 232, "spa": 0, "spd": 24, "spe": 0}, - "nature": "Bold", - "moves": [["Scald"], ["Psyshock"], ["Thunder Wave"], ["Slack Off"]] - } - ] - }, - "skarmory": { - "flags": {}, - "sets": [ - { - "species": "Skarmory", - "item": "Leftovers", - "ability": "Sturdy", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Iron Head"], ["Spikes"], ["Roost"], ["Whirlwind"]] - }, - { - "species": "Skarmory", - "item": "Leftovers", - "ability": "Sturdy", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Roost"], ["Defog"], ["Brave Bird"], ["Whirlwind"]] - }, - { - "species": "Skarmory", - "gender": "F", - "item": "Custap Berry", - "ability": "Sturdy", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Brave Bird"], ["Spikes"], ["Taunt"], ["Stealth Rock"]] - } - ] - }, - "scizor": { - "flags": {}, - "sets": [ - { - "species": "Scizor", - "item": "Scizorite", - "ability": "Light Metal", - "evs": {"hp": 248, "atk": 84, "def": 0, "spa": 0, "spd": 176, "spe": 0}, - "nature": "Impish", - "moves": [["Swords Dance"], ["Roost"], ["Bullet Punch"], ["Knock Off"]] - }, - { - "species": "Scizor", - "item": "Choice Band", - "ability": "Technician", - "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Adamant", - "moves": [["U-turn"], ["Bullet Punch"], ["Knock Off"], ["Superpower"]] - }, - { - "species": "Scizor", - "item": "Scizorite", - "ability": "Light Metal", - "evs": {"hp": 252, "atk": 4, "def": 252, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Impish", - "moves": [["Defog"], ["Roost"], ["Bullet Punch"], ["Knock Off"]] - }, - { - "species": "Scizor", - "item": "Scizorite", - "ability": "Light Metal", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Bullet Punch"], ["Bug Bite"], ["Superpower"]] - } - ] - }, - "rotomwash": { - "flags": {}, - "sets": [ - { - "species": "Rotom-Wash", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 216, "spa": 0, "spd": 0, "spe": 44}, - "nature": "Bold", - "moves": [["Volt Switch"], ["Hydro Pump"], ["Will-O-Wisp"], ["Pain Split"]] - } - ] - }, - "pinsir": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Pinsir", - "item": "Pinsirite", - "ability": "Hyper Cutter", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Return"], ["Close Combat"], ["Quick Attack"]], - "happiness": 255 - }, - { - "species": "Pinsir", - "item": "Pinsirite", - "ability": "Hyper Cutter", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Return"], ["Earthquake"], ["Quick Attack"]], - "happiness": 255 - } - ] - }, - "mew": { - "flags": {}, - "sets": [ - { - "species": "Mew", - "item": "Leftovers", - "ability": "Synchronize", - "evs": {"hp": 252, "atk": 0, "def": 104, "spa": 0, "spd": 0, "spe": 152}, - "nature": "Impish", - "moves": [["Defog"], ["Soft-Boiled"], ["Will-O-Wisp"], ["Knock Off"]] - }, - { - "species": "Mew", - "item": "Leftovers", - "ability": "Synchronize", - "evs": {"hp": 252, "atk": 0, "def": 104, "spa": 0, "spd": 0, "spe": 152}, - "nature": "Impish", - "moves": [["Taunt"], ["Soft-Boiled"], ["Will-O-Wisp"], ["Knock Off"]] - } - ] - }, - "metagross": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Metagross", - "item": "Metagrossite", - "ability": "Clear Body", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Hammer Arm"], ["Grass Knot"]] - }, - { - "species": "Metagross", - "item": "Metagrossite", - "ability": "Clear Body", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Hammer Arm"], ["Pursuit"]] - }, - { - "species": "Metagross", - "item": "Metagrossite", - "ability": "Clear Body", - "evs": {"hp": 80, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 176}, - "nature": "Adamant", - "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Earthquake"], ["Agility"]] - } - ] - }, - "manectric": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Manectric", - "item": "Manectite", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Overheat"], ["Hidden Power Ice"]] - }, - { - "species": "Manectric", - "item": "Manectite", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Flamethrower"], ["Hidden Power Ice"]] - } - ] - }, - "mandibuzz": { - "flags": {}, - "sets": [ - { - "species": "Mandibuzz", - "item": "Leftovers", - "ability": "Overcoat", - "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 108, "spe": 16}, - "nature": "Bold", - "moves": [["Foul Play"], ["Roost"], ["Taunt"], ["Defog"]] - } - ] - }, - "mamoswine": { - "flags": {}, - "sets": [ - { - "species": "Mamoswine", - "item": "Focus Sash", - "ability": "Thick Fat", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Stealth Rock"], ["Endeavor"], ["Ice Shard"], ["Earthquake"]] - }, - { - "species": "Mamoswine", - "item": "Life Orb", - "ability": "Thick Fat", - "evs": {"hp": 0, "atk": 240, "def": 0, "spa": 16, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Earthquake"], ["Ice Shard"], ["Icicle Crash"], ["Freeze-Dry"]] - } - ] - }, - "magnezone": { - "flags": {}, - "sets": [ - { - "species": "Magnezone", - "item": "Choice Scarf", - "ability": "Magnet Pull", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Hidden Power Fire"], ["Flash Cannon"], ["Thunderbolt"]] - }, - { - "species": "Magnezone", - "item": "Choice Specs", - "ability": "Magnet Pull", - "evs": {"hp": 172, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 84}, - "nature": "Modest", - "moves": [["Volt Switch"], ["Hidden Power Fire"], ["Flash Cannon"], ["Thunderbolt"]] - } - ] - }, - "lopunny": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Lopunny", - "item": "Lopunnite", - "ability": "Limber", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["High Jump Kick"], ["Return"], ["Fake Out"], ["Ice Punch"]], - "happiness": 255 - }, - { - "species": "Lopunny", - "item": "Lopunnite", - "ability": "Limber", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["High Jump Kick"], ["Return"], ["Fake Out"], ["Power-Up Punch"]], - "happiness": 255 - }, - { - "species": "Lopunny", - "item": "Lopunnite", - "ability": "Limber", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["High Jump Kick"], ["Return"], ["Substitute"], ["Encore"]], - "happiness": 255 - } - ] - }, - "latios": { - "flags": {}, - "sets": [ - { - "species": "Latios", - "item": "Choice Scarf", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Psyshock"], ["Defog"], ["Trick"]] - }, - { - "species": "Latios", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Psyshock"], ["Earthquake"], ["Defog"]] - }, - { - "species": "Latios", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Psyshock"], ["Roost"], ["Defog"]] - }, - { - "species": "Latios", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Psyshock"], ["Hidden Power Fire"], ["Defog"]] - }, - { - "species": "Latios", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Psyshock"], ["Calm Mind"], ["Roost"]] - }, - { - "species": "Latios", - "gender": "M", - "item": "Latiosite", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Psyshock"], ["Draco Meteor"], ["Earthquake"], ["Hidden Power Fire"]] - } - ] - }, - "latias": { - "flags": {}, - "sets": [ - { - "species": "Latias", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Defog"], ["Draco Meteor"], ["Psyshock"], ["Healing Wish"]] - }, - { - "species": "Latias", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 72, "atk": 0, "def": 0, "spa": 184, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Defog"], ["Draco Meteor"], ["Psyshock"], ["Roost"]] - }, - { - "species": "Latias", - "gender": "F", - "item": "Latiasite", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 100, "spa": 0, "spd": 0, "spe": 160}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Roost"], ["Substitute"], ["Calm Mind"], ["Stored Power"]] - }, - { - "species": "Latias", - "gender": "F", - "item": "Latiasite", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 68, "spa": 0, "spd": 0, "spe": 192}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Thunder Wave"], ["Roar"], ["Recover"], ["Dragon Pulse"]] - } - ] - }, - "landorustherian": { - "flags": {}, - "sets": [ - { - "species": "Landorus-Therian", - "item": "Choice Scarf", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 24, "spa": 0, "spd": 0, "spe": 232}, - "nature": "Jolly", - "moves": [["Earthquake"], ["U-turn"], ["Explosion"], ["Stone Edge"]] - }, - { - "species": "Landorus-Therian", - "item": "Leftovers", - "ability": "Intimidate", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 8, "spe": 8}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Earthquake"], ["U-turn"], ["Stone Edge"]] - }, - { - "species": "Landorus-Therian", - "item": "Leftovers", - "ability": "Intimidate", - "evs": {"hp": 56, "atk": 220, "def": 0, "spa": 0, "spd": 0, "spe": 232}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Rock Polish"], ["Earthquake"], ["Stone Edge"]] - }, - { - "species": "Landorus-Therian", - "item": "Earth Plate", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Stealth Rock"], ["Earthquake"], ["Stone Edge"], ["U-turn"]] - } - ] - }, - "kyuremblack": { - "flags": {}, - "sets": [ - { - "species": "Kyurem-Black", - "item": "Choice Scarf", - "ability": "Teravolt", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 32, "spd": 0, "spe": 224}, - "nature": "Naive", - "moves": [["Outrage"], ["Dragon Claw"], ["Fusion Bolt"], ["Ice Beam"]] - }, - { - "species": "Kyurem-Black", - "item": "Life Orb", - "ability": "Teravolt", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 56, "spd": 0, "spe": 200}, - "nature": "Lonely", - "moves": [["Dragon Claw"], ["Fusion Bolt"], ["Ice Beam"], ["Iron Head"]] - }, - { - "species": "Kyurem-Black", - "item": "Life Orb", - "ability": "Teravolt", - "evs": {"hp": 0, "atk": 56, "def": 0, "spa": 252, "spd": 0, "spe": 200}, - "nature": "Mild", - "moves": [["Ice Beam"], ["Fusion Bolt"], ["Earth Power"], ["Outrage"]] - }, - { - "species": "Kyurem-Black", - "item": "Leftovers", - "ability": "Teravolt", - "evs": {"hp": 56, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 200}, - "nature": "Mild", - "moves": [["Substitute"], ["Ice Beam"], ["Fusion Bolt"], ["Earth Power"]] - } - ] - }, - "keldeo": { - "flags": {}, - "sets": [ - { - "species": "Keldeo", - "item": "Choice Specs", - "ability": "Justified", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Hydro Pump"], ["Secret Sword"], ["Scald"], ["Icy Wind"]] - }, - { - "species": "Keldeo", - "item": "Choice Scarf", - "ability": "Justified", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Hydro Pump"], ["Secret Sword"], ["Scald"], ["Hidden Power Electric"]] - }, - { - "species": "Keldeo", - "item": "Leftovers", - "ability": "Justified", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Scald"], ["Secret Sword"], ["Substitute"], ["Calm Mind"]] - }, - { - "species": "Keldeo", - "item": "Salac Berry", - "ability": "Justified", - "evs": {"hp": 8, "atk": 0, "def": 0, "spa": 248, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Endeavor"], ["Substitute"], ["Hydro Pump"], ["Secret Sword"]] - } - ] - }, - "heracross": { - "flags": {}, - "sets": [ - { - "species": "Heracross", - "item": "Heracronite", - "ability": "Guts", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Close Combat"], ["Pin Missile"], ["Rock Blast"], ["Swords Dance"]] - }, - { - "species": "Heracross", - "item": "Toxic Orb", - "ability": "Guts", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Close Combat"], ["Megahorn"], ["Facade"], ["Swords Dance"]] - } - ] - }, - "heatran": { - "flags": {}, - "sets": [ - { - "species": "Heatran", - "item": "Choice Scarf", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Overheat"], ["Flash Cannon"], ["Earth Power"], ["Stone Edge"]] - }, - { - "species": "Heatran", - "item": "Air Balloon", - "ability": "Flash Fire", - "evs": {"hp": 12, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 244}, - "nature": "Timid", - "moves": [["Stealth Rock"], ["Fire Blast"], ["Taunt"], ["Earth Power"]] - }, - { - "species": "Heatran", - "item": "Leftovers", - "ability": "Flash Fire", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 68}, - "nature": "Calm", - "moves": [["Lava Plume"], ["Toxic"], ["Taunt"], ["Stealth Rock"]] - } - ] - }, - "gyarados": { - "flags": {}, - "sets": [ - { - "species": "Gyarados", - "item": "Leftovers", - "ability": "Intimidate", - "evs": {"hp": 88, "atk": 192, "def": 4, "spa": 0, "spd": 0, "spe": 224}, - "nature": "Adamant", - "moves": [["Substitute"], ["Dragon Dance"], ["Waterfall"], ["Bounce"]] - }, - { - "species": "Gyarados", - "item": "Gyaradosite", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Dragon Dance"], ["Waterfall"], ["Crunch"], ["Earthquake"]] - } - ] - }, - "gallade": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Gallade", - "item": "Galladite", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Close Combat"], ["Knock Off"], ["Zen Headbutt"]] - }, - { - "species": "Gallade", - "item": "Galladite", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Close Combat"], ["Ice Punch"], ["Zen Headbutt"]] - } - ] - }, - "gliscor": { - "flags": {}, - "sets": [ - { - "species": "Gliscor", - "item": "Toxic Orb", - "ability": "Poison Heal", - "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 72}, - "nature": "Careful", - "moves": [["Swords Dance"], ["Roost"], ["Knock Off"], ["Earthquake"]] - }, - { - "species": "Gliscor", - "item": "Toxic Orb", - "ability": "Poison Heal", - "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 72}, - "nature": "Careful", - "moves": [["Taunt"], ["Roost"], ["Knock Off"], ["Earthquake"]] - }, - { - "species": "Gliscor", - "item": "Toxic Orb", - "ability": "Poison Heal", - "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 72}, - "nature": "Careful", - "moves": [["Taunt"], ["Roost"], ["Toxic"], ["Earthquake"]] - }, - { - "species": "Gliscor", - "item": "Toxic Orb", - "ability": "Poison Heal", - "evs": {"hp": 244, "atk": 0, "def": 28, "spa": 0, "spd": 0, "spe": 236}, - "nature": "Impish", - "moves": [["Substitute"], ["Toxic"], ["Protect"], ["Earthquake"]] - } - ] - }, - "gengar": { - "flags": {}, - "sets": [ - { - "species": "Gengar", - "item": "Black Sludge", - "ability": "Levitate", - "evs": {"hp": 8, "atk": 0, "def": 0, "spa": 248, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Hex"], ["Taunt"], ["Will-O-Wisp"], ["Sludge Wave"]] - }, - { - "species": "Gengar", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Taunt"]] - }, - { - "species": "Gengar", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Pain Split"], ["Shadow Ball"], ["Focus Blast"]] - } - ] - }, - "gardevoir": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Gardevoir", - "item": "Gardevoirite", - "ability": "Trace", - "evs": {"hp": 0, "atk": 0, "def": 24, "spa": 232, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Calm Mind"], ["Hyper Voice"], ["Psyshock"], ["Focus Blast"]] - }, - { - "species": "Gardevoir", - "item": "Gardevoirite", - "ability": "Trace", - "evs": {"hp": 0, "atk": 0, "def": 24, "spa": 232, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Taunt"]] - }, - { - "species": "Gardevoir", - "item": "Gardevoirite", - "ability": "Trace", - "evs": {"hp": 0, "atk": 0, "def": 24, "spa": 232, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Will-O-Wisp"]] - } - ] - }, - "garchomp": { - "flags": {}, - "sets": [ - { - "species": "Garchomp", - "item": "Rocky Helmet", - "ability": "Rough Skin", - "evs": {"hp": 252, "atk": 0, "def": 164, "spa": 0, "spd": 76, "spe": 16}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Earthquake"], ["Dragon Tail"], ["Fire Blast"]] - }, - { - "species": "Garchomp", - "item": "Focus Sash", - "ability": "Rough Skin", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Stealth Rock"], ["Earthquake"], ["Dragon Claw"], ["Fire Blast"]] - }, - { - "species": "Garchomp", - "item": "Lum Berry", - "ability": "Rough Skin", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Stealth Rock"], ["Earthquake"], ["Outrage"], ["Swords Dance"]] - }, - { - "species": "Garchomp", - "item": "Garchompite", - "ability": "Rough Skin", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Draco Meteor"], ["Earthquake"], ["Fire Blast"], ["Stone Edge"]] - }, - { - "species": "Garchomp", - "item": "Choice Scarf", - "ability": "Rough Skin", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Earthquake"], ["Outrage"], ["Stone Edge"], ["Dragon Claw"]] - } - ] - }, - "ferrothorn": { - "flags": {}, - "sets": [ - { - "species": "Ferrothorn", - "item": "Leftovers", - "ability": "Iron Barbs", - "evs": {"hp": 252, "atk": 0, "def": 88, "spa": 0, "spd": 168, "spe": 0}, - "nature": "Relaxed", - "moves": [["Spikes"], ["Leech Seed"], ["Gyro Ball"], ["Power Whip"]] - }, - { - "species": "Ferrothorn", - "item": "Shed Shell", - "ability": "Iron Barbs", - "evs": {"hp": 252, "atk": 0, "def": 88, "spa": 0, "spd": 168, "spe": 0}, - "nature": "Relaxed", - "moves": [["Spikes"], ["Leech Seed"], ["Gyro Ball"], ["Protect"]] - }, - { - "species": "Ferrothorn", - "item": "Leftovers", - "ability": "Iron Barbs", - "evs": {"hp": 252, "atk": 0, "def": 88, "spa": 0, "spd": 168, "spe": 0}, - "nature": "Relaxed", - "moves": [["Protect"], ["Leech Seed"], ["Gyro Ball"], ["Stealth Rock"]] - } - ] - }, - "excadrill": { - "flags": {}, - "sets": [ - { - "species": "Excadrill", - "item": "Choice Scarf", - "ability": "Mold Breaker", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Rapid Spin"]] - }, - { - "species": "Excadrill", - "item": "Air Balloon", - "ability": "Sand Rush", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Swords Dance"]] - }, - { - "species": "Excadrill", - "item": "Life Orb", - "ability": "Sand Rush", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Rapid Spin"]] - }, - { - "species": "Excadrill", - "item": "Leftovers", - "ability": "Mold Breaker", - "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Earthquake"], ["Iron Head"], ["Rapid Spin"], ["Toxic"]] - } - ] - }, - "dragonite": { - "flags": {}, - "sets": [ - { - "species": "Dragonite", - "item": "Choice Band", - "ability": "Multiscale", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Outrage"], ["Extreme Speed"], ["Thunder Punch"], ["Superpower"]] - }, - { - "species": "Dragonite", - "item": "Lum Berry", - "ability": "Multiscale", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Dragon Dance"], ["Outrage"], ["Extreme Speed"], ["Earthquake"]] - }, - { - "species": "Dragonite", - "item": "Lum Berry", - "ability": "Multiscale", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Dragon Dance"], ["Outrage"], ["Extreme Speed"], ["Fire Punch"]] - } - ] - }, - "conkeldurr": { - "flags": {}, - "sets": [ - { - "species": "Conkeldurr", - "item": "Assault Vest", - "ability": "Guts", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 236, "spe": 20}, - "nature": "Adamant", - "moves": [["Drain Punch"], ["Mach Punch"], ["Ice Punch"], ["Poison Jab"]] - }, - { - "species": "Conkeldurr", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 48, "atk": 252, "def": 0, "spa": 0, "spd": 208, "spe": 0}, - "nature": "Adamant", - "moves": [["Drain Punch"], ["Mach Punch"], ["Ice Punch"], ["Thunder Punch"]] - } - ] - }, - "clefable": { - "flags": {}, - "sets": [ - { - "species": "Clefable", - "item": "Leftovers", - "ability": "Magic Guard", - "evs": {"hp": 252, "atk": 0, "def": 172, "spa": 0, "spd": 84, "spe": 0}, - "nature": "Calm", - "moves": [["Calm Mind"], ["Moonblast"], ["Soft-Boiled"], ["Flamethrower"]] - }, - { - "species": "Clefable", - "item": "Leftovers", - "ability": "Unaware", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Moonblast"], ["Wish"], ["Protect"], ["Heal Bell"]] - }, - { - "species": "Clefable", - "item": "Leftovers", - "ability": "Magic Guard", - "evs": {"hp": 252, "atk": 0, "def": 172, "spa": 0, "spd": 84, "spe": 0}, - "nature": "Calm", - "moves": [["Stealth Rock"], ["Moonblast"], ["Thunder Wave"], ["Soft-Boiled"]] - } - ] - }, - "charizard": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Charizard", - "item": "Charizardite X", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Dragon Claw"], ["Flare Blitz"], ["Roost"]] - }, - { - "species": "Charizard", - "item": "Charizardite X", - "ability": "Blaze", - "evs": {"hp": 248, "atk": 24, "def": 0, "spa": 0, "spd": 180, "spe": 56}, - "nature": "Adamant", - "moves": [["Earthquake"], ["Dragon Claw"], ["Will-O-Wisp"], ["Roost"]] - }, - { - "species": "Charizard", - "item": "Charizardite X", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Dragon Claw"], ["Flare Blitz"], ["Earthquake"]] - }, - { - "species": "Charizard", - "item": "Charizardite X", - "ability": "Blaze", - "evs": {"hp": 144, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 112}, - "nature": "Adamant", - "moves": [["Tailwind"], ["Outrage"], ["Flare Blitz"], ["Swords Dance"]] - }, - { - "species": "Charizard", - "item": "Charizardite Y", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Fire Blast"], ["Solar Beam"], ["Focus Blast"], ["Roost"]] - } - ] - }, - "chansey": { - "flags": {}, - "sets": [ - { - "species": "Chansey", - "item": "Eviolite", - "ability": "Natural Cure", - "evs": {"hp": 4, "atk": 0, "def": 252, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Bold", - "moves": [["Soft-Boiled"], ["Heal Bell"], ["Stealth Rock"], ["Seismic Toss"]] - }, - { - "species": "Chansey", - "item": "Eviolite", - "ability": "Natural Cure", - "evs": {"hp": 4, "atk": 0, "def": 252, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Bold", - "moves": [["Wish"], ["Soft-Boiled"], ["Seismic Toss"], ["Toxic"]] - } - ] - }, - "breloom": { - "flags": {}, - "sets": [ - { - "species": "Breloom", - "item": "Toxic Orb", - "ability": "Poison Heal", - "evs": {"hp": 12, "atk": 244, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Superpower"], ["Seed Bomb"], ["Facade"]] - }, - { - "species": "Breloom", - "item": "Focus Sash", - "ability": "Technician", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Spore"], ["Bullet Seed"], ["Mach Punch"], ["Rock Tomb"]] - }, - { - "species": "Breloom", - "item": "Life Orb", - "ability": "Technician", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Spore"], ["Bullet Seed"], ["Mach Punch"], ["Swords Dance"]] - } - ] - }, - "bisharp": { - "flags": {}, - "sets": [ - { - "species": "Bisharp", - "item": "Black Glasses", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 52, "spe": 204}, - "nature": "Adamant", - "moves": [["Knock Off"], ["Iron Head"], ["Sucker Punch"], ["Pursuit"]] - }, - { - "species": "Bisharp", - "item": "Life Orb", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Knock Off"], ["Swords Dance"], ["Iron Head"], ["Sucker Punch"]] - }, - { - "species": "Bisharp", - "item": "Life Orb", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Knock Off"], ["Low Kick"], ["Iron Head"], ["Sucker Punch"]] - }, - { - "species": "Bisharp", - "item": "Black Glasses", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Knock Off"], ["Low Kick"], ["Iron Head"], ["Sucker Punch"]] - } - ] - }, - "azumarill": { - "flags": {}, - "sets": [ - { - "species": "Azumarill", - "item": "Assault Vest", - "ability": "Huge Power", - "evs": {"hp": 240, "atk": 252, "def": 0, "spa": 0, "spd": 16, "spe": 0}, - "nature": "Adamant", - "moves": [["Play Rough"], ["Waterfall"], ["Aqua Jet"], ["Knock Off"]] - }, - { - "species": "Azumarill", - "item": "Sitrus Berry", - "ability": "Huge Power", - "evs": {"hp": 92, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 164}, - "nature": "Adamant", - "moves": [["Belly Drum"], ["Aqua Jet"], ["Play Rough"], ["Knock Off"]] - }, - { - "species": "Azumarill", - "item": "Choice Band", - "ability": "Huge Power", - "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84}, - "nature": "Adamant", - "moves": [["Play Rough"], ["Waterfall"], ["Aqua Jet"], ["Superpower"]] - } - ] - }, - "altaria": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Altaria", - "item": "Altarianite", - "ability": "Cloud Nine", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Roost"], ["Return"], ["Earthquake"]], - "happiness": 255 - }, - { - "species": "Altaria", - "item": "Altarianite", - "ability": "Cloud Nine", - "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 96, "spe": 28}, - "nature": "Impish", - "moves": [["Dragon Dance"], ["Roost"], ["Return"], ["Substitute"]], - "happiness": 255 - }, - { - "species": "Altaria", - "item": "Altarianite", - "ability": "Cloud Nine", - "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 96, "spe": 28}, - "nature": "Impish", - "moves": [["Dragon Dance"], ["Roost"], ["Return"], ["Heal Bell"]], - "happiness": 255 - }, - { - "species": "Altaria", - "item": "Altarianite", - "ability": "Cloud Nine", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 168, "spd": 0, "spe": 92}, - "nature": "Modest", - "moves": [["Hyper Voice"], ["Fire Blast"], ["Roost"], ["Earthquake"]] - }, - { - "species": "Altaria", - "item": "Altarianite", - "ability": "Natural Cure", - "evs": {"hp": 248, "atk": 0, "def": 104, "spa": 0, "spd": 156, "spe": 0}, - "nature": "Bold", - "moves": [["Hyper Voice"], ["Roost"], ["Heal Bell"], ["Flamethrower"]] - }, - { - "species": "Altaria", - "item": "Altarianite", - "ability": "Cloud Nine", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Return"], ["Earthquake"], ["Fire Blast"]], - "happiness": 255 - } - ] - }, - "serperior": { - "flags": {}, - "sets": [ - { - "species": "Serperior", - "item": "Life Orb", - "ability": "Contrary", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Glare"]] - }, - { - "species": "Serperior", - "item": "Meadow Plate", - "ability": "Contrary", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Taunt"]] - }, - { - "species": "Serperior", - "item": "Leftovers", - "ability": "Contrary", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Ground"], ["Substitute"]] - }, - { - "species": "Serperior", - "item": "Life Orb", - "ability": "Contrary", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Giga Drain"]] - } - ] - }, - "feraligatr": { - "flags": {}, - "sets": [ - { - "species": "Feraligatr", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Waterfall"], ["Ice Punch"], ["Superpower"], ["Dragon Dance"]] - }, - { - "species": "Feraligatr", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Waterfall"], ["Ice Punch"], ["Crunch"], ["Dragon Dance"]] - } - ] - }, - "raikou": { - "flags": {}, - "sets": [ - { - "species": "Raikou", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Calm Mind"], ["Thunderbolt"], ["Hidden Power Ice"]] - }, - { - "species": "Raikou", - "item": "Choice Specs", - "ability": "Pressure", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"]] - }, - { - "species": "Raikou", - "item": "Assault Vest", - "ability": "Pressure", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"]] - } - ] - } - }, - "UU": { - "gardevoir": { - "flags": {}, - "sets": [ - { - "species": "Gardevoir", - "item": "Choice Specs", - "ability": "Trace", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Moonblast"], ["Psyshock"], ["Focus Blast"], ["Trick"]] - }, - { - "species": "Gardevoir", - "item": "Choice Specs", - "ability": "Trace", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Moonblast"], ["Psyshock"], ["Focus Blast"], ["Shadow Ball"]] - }, - { - "species": "Gardevoir", - "item": "Choice Specs", - "ability": "Trace", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Moonblast"], ["Psyshock"], ["Shadow Ball"], ["Trick"]] - }, - { - "species": "Gardevoir", - "item": "Leftovers", - "ability": "Trace", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Moonblast"], ["Psyshock"], ["Focus Blast", "Substitute"]] - } - ] - }, - "sableye": { - "flags": {}, - "sets": [ - { - "species": "Sableye", - "item": "Leftovers", - "ability": "Prankster", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Recover"], ["Will-O-Wisp"], ["Taunt"], ["Knock Off"]] - } - ] - }, - "diancie": { - "flags": {}, - "sets": [ - { - "species": "Diancie", - "item": "Leftovers", - "ability": "Clear Body", - "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 0}, - "nature": "Quiet", - "moves": [["Stealth Rock"], ["Moonblast"], ["Diamond Storm"], ["Earth Power", "Protect"]] - } - ] - }, - "metagross": { - "flags": {}, - "sets": [ - { - "species": "Metagross", - "item": "Shuca Berry", - "ability": "Clear Body", - "evs": {"hp": 40, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 216}, - "nature": "Adamant", - "moves": [["Stealth Rock"], ["Earthquake", "Ice Punch", "Thunder Punch"], ["Zen Headbutt"], ["Bullet Punch"]] - } - ] - }, - "gyarados": { - "flags": {}, - "sets": [ - { - "species": "Gyarados", - "item": "Leftovers", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Waterfall"], ["Bounce"], ["Substitute", "Earthquake", "Stone Edge"]] - }, - { - "species": "Gyarados", - "item": "Leftovers", - "ability": "Intimidate", - "evs": {"hp": 216, "atk": 60, "def": 184, "spa": 0, "spd": 0, "spe": 48}, - "nature": "Impish", - "moves": [["Rest"], ["Sleep Talk"], ["Waterfall"], ["Toxic", "Roar"]] - } - ] - }, - "hoopa": { - "flags": {}, - "sets": [ - { - "species": "Hoopa", - "item": "Life Orb", - "ability": "Magician", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Trick Room"], ["Shadow Ball"], ["Psyshock", "Psychic"], ["Focus Blast"]] - }, - { - "species": "Hoopa", - "item": "Life Orb", - "ability": "Magician", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Shadow Ball"], ["Focus Blast"], ["Psyshock"], ["Substitute"]] - }, - { - "species": "Hoopa", - "item": "Life Orb", - "ability": "Magician", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Shadow Ball"], ["Focus Blast"], ["Psyshock"], ["Nasty Plot"]] - }, - { - "species": "Hoopa", - "item": "Life Orb", - "ability": "Magician", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Shadow Ball"], ["Focus Blast"], ["Nasty Plot"], ["Substitute"]] - } - ] - }, - "crobat": { - "flags": {}, - "sets": [ - { - "species": "Crobat", - "item": "Choice Band", - "ability": "Infiltrator", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Sleep Talk"], ["Brave Bird"], ["Cross Poison"], ["U-turn"]] - }, - { - "species": "Crobat", - "item": "Black Sludge", - "ability": "Infiltrator", - "evs": {"hp": 248, "atk": 0, "def": 80, "spa": 0, "spd": 4, "spe": 176}, - "nature": "Jolly", - "moves": [["Roost"], ["Defog"], ["Taunt"], ["Brave Bird"]] - } - ] - }, - "entei": { - "flags": {}, - "sets": [ - { - "species": "Entei", - "item": "Choice Band", - "ability": "Pressure", - "shiny": true, - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Extreme Speed"], ["Sacred Fire"], ["Stone Edge"], ["Bulldoze"]] - }, - { - "species": "Entei", - "item": "Life Orb", - "ability": "Pressure", - "shiny": true, - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Extreme Speed"], ["Sacred Fire"], ["Stone Edge"], ["Bulldoze"]] - }, - { - "species": "Entei", - "item": "Assault Vest", - "ability": "Pressure", - "shiny": true, - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 240, "spe": 16}, - "nature": "Adamant", - "moves": [["Extreme Speed"], ["Sacred Fire"], ["Stone Edge"], ["Bulldoze"]] - } - ] - }, - "suicune": { - "flags": {}, - "sets": [ - { - "species": "Suicune", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Rest"], ["Sleep Talk"], ["Calm Mind"], ["Scald"]] - }, - { - "species": "Suicune", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Rest"], ["Sleep Talk"], ["Roar"], ["Scald"]] - }, - { - "species": "Suicune", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 196, "spd": 0, "spe": 64}, - "nature": "Modest", - "moves": [["Substitute"], ["Calm Mind"], ["Hydro Pump"], ["Ice Beam"]] - }, - { - "species": "Suicune", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Grass"]] - } - ] - }, - "aerodactyl": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Aerodactyl", - "item": "Aerodactylite", - "ability": "Pressure", - "evs": {"hp": 40, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 216}, - "nature": "Jolly", - "moves": [["Hone Claws"], ["Stone Edge"], ["Aerial Ace"], ["Aqua Tail"]] - }, - { - "species": "Aerodactyl", - "item": "Aerodactylite", - "ability": "Pressure", - "evs": {"hp": 40, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 216}, - "nature": "Jolly", - "moves": [["Roost"], ["Taunt"], ["Stone Edge"], ["Aerial Ace"]] - } - ] - }, - "hydreigon": { - "flags": {}, - "sets": [ - { - "species": "Hydreigon", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Roost"], ["Draco Meteor"], ["Dark Pulse"], ["Fire Blast"]] - }, - { - "species": "Hydreigon", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Roost"], ["Draco Meteor"], ["Fire Blast"], ["Superpower"]] - }, - { - "species": "Hydreigon", - "item": "Choice Specs", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Dark Pulse"], ["Focus Blast"], ["Flash Cannon"]] - }, - { - "species": "Hydreigon", - "item": "Choice Scarf", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["U-turn"], ["Draco Meteor"], ["Dark Pulse"], ["Focus Blast"]] - } - ] - }, - "machamp": { - "flags": {}, - "sets": [ - { - "species": "Machamp", - "item": "Assault Vest", - "ability": "No Guard", - "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84}, - "nature": "Adamant", - "moves": [["Bullet Punch"], ["Dynamic Punch"], ["Knock Off"], ["Ice Punch"]] - }, - { - "species": "Machamp", - "item": "Choice Band", - "ability": "No Guard", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Bullet Punch"], ["Dynamic Punch"], ["Knock Off"], ["Ice Punch"]] - }, - { - "species": "Machamp", - "item": "Leftovers", - "ability": "No Guard", - "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 8}, - "nature": "Adamant", - "moves": [["Rest"], ["Sleep Talk"], ["Dynamic Punch"], ["Knock Off"]] - }, - { - "species": "Machamp", - "item": "Leftovers", - "ability": "No Guard", - "evs": {"hp": 212, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 44}, - "nature": "Adamant", - "moves": [["Bulk Up"], ["Dynamic Punch"], ["Stone Edge"], ["Ice Punch"]] - } - ] - }, - "mienshao": { - "flags": {}, - "sets": [ - { - "species": "Mienshao", - "item": "Life Orb", - "ability": "Regenerator", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Fake Out"], ["High Jump Kick"], ["Knock Off"], ["U-turn"]] - }, - { - "species": "Mienshao", - "item": "Choice Scarf", - "ability": "Reckless", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["High Jump Kick"], ["Knock Off"], ["Poison Jab"], ["U-turn"]] - } - ] - }, - "absol": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Absol", - "item": "Absolite", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Sucker Punch"], ["Knock Off"], ["Superpower"]] - }, - { - "species": "Absol", - "item": "Absolite", - "ability": "Justified", - "evs": {"hp": 0, "atk": 240, "def": 0, "spa": 44, "spd": 0, "spe": 224}, - "nature": "Naive", - "moves": [["Sucker Punch"], ["Knock Off"], ["Ice Beam"], ["Fire Blast"]] - } - ] - }, - "aggron": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Aggron", - "item": "Aggronite", - "ability": "Sturdy", - "evs": {"hp": 248, "atk": 0, "def": 16, "spa": 0, "spd": 244, "spe": 0}, - "nature": "Impish", - "moves": [["Rest"], ["Sleep Talk"], ["Heavy Slam"], ["Earthquake"]] - }, - { - "species": "Aggron", - "item": "Aggronite", - "ability": "Sturdy", - "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 124, "spe": 0}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Roar"], ["Heavy Slam"], ["Earthquake"]] - } - ] - }, - "beedrill": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Beedrill", - "item": "Beedrillite", - "ability": "Swarm", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Protect"], ["U-turn"], ["Poison Jab"], ["Drill Run"]] - } - ] - }, - "blastoise": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Blastoise", - "item": "Blastoisinite", - "ability": "Rain Dish", - "evs": {"hp": 56, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 200}, - "nature": "Modest", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Aura Sphere"], ["Dark Pulse"]] - }, - { - "species": "Blastoise", - "item": "Blastoisinite", - "ability": "Torrent", - "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 44, "spd": 64, "spe": 0}, - "nature": "Bold", - "moves": [["Rapid Spin"], ["Scald"], ["Ice Beam"], ["Dark Pulse"]] - } - ] - }, - "empoleon": { - "flags": {}, - "sets": [ - { - "species": "Empoleon", - "item": "Leftovers", - "ability": "Torrent", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Calm", - "moves": [["Stealth Rock"], ["Defog"], ["Roar"], ["Scald"]] - }, - { - "species": "Empoleon", - "item": "Choice Specs", - "ability": "Torrent", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Hydro Pump"], ["Flash Cannon"], ["Ice Beam"], ["Grass Knot"]] - }, - { - "species": "Empoleon", - "item": "Petaya Berry", - "ability": "Torrent", - "evs": {"hp": 12, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 240}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Agility"], ["Substitute"], ["Surf"], ["Ice Beam"]] - } - ] - }, - "krookodile": { - "flags": {}, - "sets": [ - { - "species": "Krookodile", - "item": "Choice Band", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Pursuit"], ["Earthquake"], ["Knock Off"], ["Superpower"]] - }, - { - "species": "Krookodile", - "item": "Choice Scarf", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Earthquake"], ["Knock Off"], ["Stone Edge"], ["Superpower"]] - }, - { - "species": "Krookodile", - "item": "Leftovers", - "ability": "Intimidate", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Taunt"], ["Earthquake"], ["Knock Off"]] - } - ] - }, - "nidoqueen": { - "flags": {}, - "sets": [ - { - "species": "Nidoqueen", - "gender": "F", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 128, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 128}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Stealth Rock"], ["Sludge Wave"], ["Earth Power"], ["Ice Beam"]] - }, - { - "species": "Nidoqueen", - "gender": "F", - "item": "Black Sludge", - "ability": "Sheer Force", - "evs": {"hp": 248, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 20}, - "nature": "Bold", - "moves": [["Stealth Rock"], ["Roar"], ["Earth Power"], ["Ice Beam"]] - } - ] - }, - "shaymin": { - "flags": {}, - "sets": [ - { - "species": "Shaymin", - "item": "Leftovers", - "ability": "Natural Cure", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Substitute"], ["Leech Seed"], ["Seed Flare"], ["Air Slash"]] - }, - { - "species": "Shaymin", - "item": "Life Orb", - "ability": "Natural Cure", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Rest"], ["Seed Flare"], ["Earth Power"], ["Air Slash"]] - } - ] - }, - "swampert": { - "flags": {}, - "sets": [ - { - "species": "Swampert", - "item": "Leftovers", - "ability": "Torrent", - "evs": {"hp": 240, "atk": 16, "def": 252, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Relaxed", - "moves": [["Stealth Rock"], ["Roar"], ["Earthquake"], ["Scald"]] - }, - { - "species": "Swampert", - "item": "Choice Band", - "ability": "Torrent", - "evs": {"hp": 204, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 52}, - "nature": "Adamant", - "moves": [["Waterfall"], ["Earthquake"], ["Ice Beam"], ["Superpower"]] - }, - { - "species": "Swampert", - "item": "Chesto Berry", - "ability": "Torrent", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Rest"], ["Curse"], ["Earthquake"], ["Ice Beam"]] - }, - { - "species": "Swampert", - "item": "Swampertite", - "ability": "Torrent", - "evs": {"hp": 104, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 152}, - "nature": "Adamant", - "moves": [["Rain Dance"], ["Waterfall"], ["Earthquake"], ["Ice Punch"]] - } - ] - }, - "ampharos": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Ampharos", - "item": "Ampharosite", - "ability": "Static", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Agility"], ["Dragon Pulse"], ["Thunderbolt"], ["Focus Blast"]] - }, - { - "species": "Ampharos", - "gender": "M", - "item": "Ampharosite", - "ability": "Static", - "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 124}, - "nature": "Modest", - "moves": [["Volt Switch"], ["Thunderbolt"], ["Dragon Pulse"], ["Focus Blast"]] - }, - { - "species": "Ampharos", - "item": "Ampharosite", - "ability": "Static", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 8, "spd": 0, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Rest"], ["Sleep Talk"], ["Volt Switch"], ["Dragon Pulse"]] - }, - { - "species": "Ampharos", - "item": "Ampharosite", - "ability": "Static", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 252, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Calm", - "moves": [["Rest"], ["Sleep Talk"], ["Volt Switch"], ["Dragon Pulse"]] - } - ] - }, - "arcanine": { - "flags": {}, - "sets": [ - { - "species": "Arcanine", - "item": "Leftovers", - "ability": "Intimidate", - "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Impish", - "moves": [["Morning Sun"], ["Will-O-Wisp"], ["Extreme Speed"], ["Flare Blitz"]] - }, - { - "species": "Arcanine", - "item": "Life Orb", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Extreme Speed"], ["Flare Blitz"], ["Close Combat"], ["Wild Charge"]] - }, - { - "species": "Arcanine", - "item": "Choice Band", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Extreme Speed"], ["Flare Blitz"], ["Close Combat"], ["Wild Charge"]] - } - ] - }, - "blissey": { - "flags": {}, - "sets": [ - { - "species": "Blissey", - "gender": "F", - "item": "Leftovers", - "ability": "Natural Cure", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Soft-Boiled"], ["Wish"], ["Toxic"], ["Seismic Toss"]] - }, - { - "species": "Blissey", - "gender": "F", - "item": "Leftovers", - "ability": "Natural Cure", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Soft-Boiled"], ["Heal Bell"], ["Toxic"], ["Seismic Toss"]] - }, - { - "species": "Blissey", - "gender": "F", - "item": "Leftovers", - "ability": "Natural Cure", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Seismic Toss"]] - } - ] - }, - "chandelure": { - "flags": {}, - "sets": [ - { - "species": "Chandelure", - "item": "Choice Scarf", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Trick"], ["Fire Blast"], ["Shadow Ball"], ["Energy Ball"]] - }, - { - "species": "Chandelure", - "item": "Choice Specs", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Trick"], ["Overheat"], ["Shadow Ball"], ["Energy Ball"]] - }, - { - "species": "Chandelure", - "item": "Leftovers", - "ability": "Flash Fire", - "evs": {"hp": 112, "atk": 0, "def": 0, "spa": 140, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Substitute"], ["Flamethrower"], ["Shadow Ball"]] - } - ] - }, - "chesnaught": { - "flags": {}, - "sets": [ - { - "species": "Chesnaught", - "item": "Leftovers", - "ability": "Bulletproof", - "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Impish", - "moves": [["Spiky Shield"], ["Spikes"], ["Leech Seed"], ["Drain Punch"]] - }, - { - "species": "Chesnaught", - "item": "Leftovers", - "ability": "Bulletproof", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Spiky Shield"], ["Spikes"], ["Leech Seed"], ["Drain Punch"]] - } - ] - }, - "cloyster": { - "flags": {}, - "sets": [ - { - "species": "Cloyster", - "item": "Focus Sash", - "ability": "Skill Link", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Shell Smash"], ["Icicle Spear"], ["Rock Blast"], ["Ice Shard"]] - }, - { - "species": "Cloyster", - "item": "Focus Sash", - "ability": "Skill Link", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Rapid Spin"], ["Spikes"], ["Icicle Spear"], ["Explosion"]] - } - ] - }, - "darmanitan": { - "flags": {}, - "sets": [ - { - "species": "Darmanitan", - "item": "Choice Band", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Flare Blitz"], ["Rock Slide"], ["Superpower"], ["U-turn"]] - }, - { - "species": "Darmanitan", - "item": "Choice Scarf", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Flare Blitz"], ["Rock Slide"], ["Superpower"], ["U-turn"]] - }, - { - "species": "Darmanitan", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Flare Blitz"], ["Rock Slide"], ["Superpower"], ["U-turn"]] - } - ] - }, - "donphan": { - "flags": {}, - "sets": [ - { - "species": "Donphan", - "item": "Leftovers", - "ability": "Sturdy", - "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Rapid Spin"], ["Ice Shard"], ["Earthquake"]] - }, - { - "species": "Donphan", - "item": "Assault Vest", - "ability": "Sturdy", - "evs": {"hp": 176, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 80}, - "nature": "Adamant", - "moves": [["Rapid Spin"], ["Ice Shard"], ["Earthquake"], ["Knock Off"]] - } - ] - }, - "espeon": { - "flags": {}, - "sets": [ - { - "species": "Espeon", - "item": "Light Clay", - "ability": "Magic Bounce", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Morning Sun"], ["Reflect"], ["Light Screen"], ["Psyshock"]] - }, - { - "species": "Espeon", - "item": "Choice Specs", - "ability": "Magic Bounce", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Trick"], ["Psyshock"], ["Shadow Ball"], ["Hidden Power Fighting"]] - } - ] - }, - "florges": { - "flags": {}, - "sets": [ - { - "species": "Florges", - "gender": "F", - "item": "Leftovers", - "ability": "Flower Veil", - "evs": {"hp": 248, "atk": 0, "def": 236, "spa": 0, "spd": 24, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Calm", - "moves": [["Protect"], ["Wish"], ["Aromatherapy"], ["Moonblast"]] - }, - { - "species": "Florges", - "gender": "F", - "item": "Leftovers", - "ability": "Flower Veil", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Synthesis"], ["Aromatherapy"], ["Calm Mind"], ["Moonblast"]] - } - ] - }, - "flygon": { - "flags": {}, - "sets": [ - { - "species": "Flygon", - "item": "Choice Scarf", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Defog"], ["Outrage"], ["Earthquake"], ["U-turn"]] - }, - { - "species": "Flygon", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Roost"], ["Defog"], ["Earthquake"], ["U-turn"]] - } - ] - }, - "forretress": { - "flags": {}, - "sets": [ - { - "species": "Forretress", - "item": "Leftovers", - "ability": "Sturdy", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0}, - "nature": "Relaxed", - "moves": [["Spikes"], ["Rapid Spin"], ["Gyro Ball"], ["Volt Switch"]] - } - ] - }, - "galvantula": { - "flags": {}, - "sets": [ - { - "species": "Galvantula", - "item": "Focus Sash", - "ability": "Compound Eyes", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Sticky Web"], ["Thunder"], ["Bug Buzz"], ["Energy Ball"]] - }, - { - "species": "Galvantula", - "gender": "M", - "item": "Life Orb", - "ability": "Compound Eyes", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Thunder"], ["Bug Buzz"], ["Energy Ball"]] - }, - { - "species": "Galvantula", - "gender": "M", - "item": "Choice Specs", - "ability": "Compound Eyes", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Thunder"], ["Bug Buzz"], ["Energy Ball"]] - } - ] - }, - "goodra": { - "flags": {}, - "sets": [ - { - "species": "Goodra", - "item": "Assault Vest", - "ability": "Sap Sipper", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Fire Blast"], ["Sludge Bomb"], ["Dragon Tail"]] - }, - { - "species": "Goodra", - "item": "Life Orb", - "ability": "Sap Sipper", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Fire Blast"], ["Sludge Bomb"], ["Ice Beam"]] - } - ] - }, - "haxorus": { - "flags": {}, - "sets": [ - { - "species": "Haxorus", - "item": "Choice Band", - "ability": "Mold Breaker", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Sleep Talk"], ["Outrage"], ["Earthquake"], ["Poison Jab"]] - }, - { - "species": "Haxorus", - "item": "Life Orb", - "ability": "Mold Breaker", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Taunt"], ["Outrage"], ["Earthquake"]] - }, - { - "species": "Haxorus", - "gender": "M", - "item": "Lum Berry", - "ability": "Mold Breaker", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Outrage"], ["Earthquake"], ["Poison Jab"]] - }, - { - "species": "Haxorus", - "item": "Life Orb", - "ability": "Mold Breaker", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Taunt"], ["Outrage"], ["Earthquake"]] - } - ] - }, - "heliolisk": { - "flags": {}, - "sets": [ - { - "species": "Heliolisk", - "item": "Choice Specs", - "ability": "Dry Skin", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Thunderbolt"], ["Grass Knot"], ["Hidden Power Ice"]] - }, - { - "species": "Heliolisk", - "item": "Life Orb", - "ability": "Dry Skin", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Thunderbolt"], ["Grass Knot"], ["Hidden Power Ice"]] - } - ] - }, - "honchkrow": { - "flags": {}, - "sets": [ - { - "species": "Honchkrow", - "item": "Life Orb", - "ability": "Moxie", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Roost"], ["Sucker Punch"], ["Brave Bird"], ["Superpower"]] - }, - { - "species": "Honchkrow", - "item": "Choice Scarf", - "ability": "Moxie", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Brave Bird"], ["Night Slash"], ["Superpower"], ["Heat Wave"]] - } - ] - }, - "infernape": { - "flags": {}, - "sets": [ - { - "species": "Infernape", - "item": "Focus Sash", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Fake Out"], ["Stealth Rock"], ["Close Combat"], ["Overheat"]] - }, - { - "species": "Infernape", - "item": "Choice Scarf", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Flare Blitz"], ["Close Combat"], ["Stone Edge"], ["U-turn"]] - }, - { - "species": "Infernape", - "item": "Choice Band", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Flare Blitz"], ["Close Combat"], ["Stone Edge"], ["U-turn"]] - }, - { - "species": "Infernape", - "item": "Life Orb", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Vacuum Wave"], ["Fire Blast"], ["Grass Knot"]] - } - ] - }, - "kingdra": { - "flags": {}, - "sets": [ - { - "species": "Kingdra", - "item": "Lum Berry", - "ability": "Sniper", - "evs": {"hp": 24, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 232}, - "nature": "Adamant", - "moves": [["Dragon Dance"], ["Outrage"], ["Waterfall"], ["Iron Head"]] - }, - { - "species": "Kingdra", - "item": "Leftovers", - "ability": "Sniper", - "evs": {"hp": 24, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 232}, - "nature": "Adamant", - "moves": [["Iron Head"], ["Dragon Dance"], ["Outrage"], ["Waterfall"]] - }, - { - "species": "Kingdra", - "item": "Scope Lens", - "ability": "Sniper", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Rash", - "moves": [["Agility"], ["Focus Energy"], ["Draco Meteor"], ["Waterfall"]] - }, - { - "species": "Kingdra", - "item": "Life Orb", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 60, "def": 0, "spa": 252, "spd": 0, "spe": 196}, - "nature": "Mild", - "moves": [["Rain Dance"], ["Hydro Pump"], ["Draco Meteor"], ["Waterfall"]] - } - ] - }, - "lucario": { - "flags": {}, - "sets": [ - { - "species": "Lucario", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Bullet Punch"], ["Close Combat"], ["Crunch"]] - }, - { - "species": "Lucario", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Extreme Speed"], ["Close Combat"], ["Ice Punch"]] - }, - { - "species": "Lucario", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Bullet Punch"], ["Close Combat"], ["Ice Punch"]] - }, - { - "species": "Lucario", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Extreme Speed"], ["Close Combat"], ["Crunch"]] - }, - { - "species": "Lucario", - "item": "Life Orb", - "ability": "Steadfast", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Vacuum Wave"], ["Aura Sphere"], ["Flash Cannon"]] - } - ] - }, - "milotic": { - "flags": {}, - "sets": [ - { - "species": "Milotic", - "item": "Life Orb", - "ability": "Competitive", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Recover"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Grass"]] - }, - { - "species": "Milotic", - "item": "Leftovers", - "ability": "Marvel Scale", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Recover"], ["Haze"], ["Scald"], ["Ice Beam"]] - }, - { - "species": "Milotic", - "item": "Leftovers", - "ability": "Marvel Scale", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Calm", - "moves": [["Recover"], ["Haze"], ["Scald"], ["Ice Beam"]] - } - ] - }, - "noivern": { - "flags": {}, - "sets": [ - { - "species": "Noivern", - "item": "Choice Specs", - "ability": "Infiltrator", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Switcheroo"], ["Draco Meteor"], ["Hurricane"], ["Flamethrower"]] - }, - { - "species": "Noivern", - "item": "Life Orb", - "ability": "Infiltrator", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Roost"], ["Draco Meteor"], ["Hurricane"], ["Flamethrower"]] - }, - { - "species": "Noivern", - "item": "Leftovers", - "ability": "Infiltrator", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Roost"], ["Taunt"], ["Draco Meteor"], ["Air Slash"]] - } - ] - }, - "porygonz": { - "flags": {}, - "sets": [ - { - "species": "Porygon-Z", - "item": "Life Orb", - "ability": "Adaptability", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Tri Attack"], ["Dark Pulse"], ["Hidden Power Fighting"]] - }, - { - "species": "Porygon-Z", - "item": "Choice Specs", - "ability": "Adaptability", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Trick"], ["Tri Attack"], ["Thunderbolt"], ["Ice Beam"]] - }, - { - "species": "Porygon-Z", - "item": "Choice Scarf", - "ability": "Adaptability", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Trick"], ["Tri Attack"], ["Thunderbolt"], ["Ice Beam"]] - } - ] - }, - "porygon2": { - "flags": {}, - "sets": [ - { - "species": "Porygon2", - "item": "Eviolite", - "ability": "Trace", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Recover"], ["Thunder Wave"], ["Thunderbolt"], ["Ice Beam"]] - }, - { - "species": "Porygon2", - "item": "Eviolite", - "ability": "Trace", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Calm", - "moves": [["Recover"], ["Thunder Wave"], ["Thunderbolt"], ["Ice Beam"]] - } - ] - }, - "rotomheat": { - "flags": {}, - "sets": [ - { - "species": "Rotom-Heat", - "item": "Choice Scarf", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Trick"], ["Overheat"], ["Volt Switch"], ["Hidden Power Grass"]] - }, - { - "species": "Rotom-Heat", - "item": "Choice Specs", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Trick"], ["Overheat"], ["Volt Switch"], ["Hidden Power Grass"]] - }, - { - "species": "Rotom-Heat", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 216, "spa": 0, "spd": 0, "spe": 44}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Pain Split"], ["Will-O-Wisp"], ["Overheat"], ["Volt Switch"]] - } - ] - }, - "scrafty": { - "flags": {}, - "sets": [ - { - "species": "Scrafty", - "item": "Leftovers", - "ability": "Shed Skin", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Rest"], ["Bulk Up"], ["Drain Punch"], ["Knock Off"]] - }, - { - "species": "Scrafty", - "item": "Life Orb", - "ability": "Moxie", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Drain Punch"], ["Knock Off"], ["Zen Headbutt"]] - } - ] - }, - "snorlax": { - "flags": {}, - "sets": [ - { - "species": "Snorlax", - "item": "Choice Band", - "ability": "Thick Fat", - "evs": {"hp": 0, "atk": 252, "def": 56, "spa": 0, "spd": 200, "spe": 0}, - "nature": "Adamant", - "moves": [["Pursuit"], ["Body Slam"], ["Earthquake"], ["Fire Punch"]] - }, - { - "species": "Snorlax", - "item": "Assault Vest", - "ability": "Thick Fat", - "evs": {"hp": 0, "atk": 252, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Adamant", - "moves": [["Pursuit"], ["Body Slam"], ["Earthquake"], ["Fire Blast"]] - }, - { - "species": "Snorlax", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 144, "atk": 0, "def": 188, "spa": 0, "spd": 176, "spe": 0}, - "nature": "Careful", - "moves": [["Rest"], ["Sleep Talk"], ["Curse"], ["Body Slam"]] - } - ] - }, - "tentacruel": { - "flags": {}, - "sets": [ - { - "species": "Tentacruel", - "item": "Black Sludge", - "ability": "Liquid Ooze", - "evs": {"hp": 240, "atk": 0, "def": 244, "spa": 0, "spd": 0, "spe": 24}, - "nature": "Bold", - "moves": [["Toxic Spikes"], ["Rapid Spin"], ["Scald"], ["Knock Off"]] - } - ] - }, - "toxicroak": { - "flags": {}, - "sets": [ - { - "species": "Toxicroak", - "item": "Life Orb", - "ability": "Dry Skin", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Sucker Punch"], ["Gunk Shot"], ["Drain Punch"]] - }, - { - "species": "Toxicroak", - "item": "Black Sludge", - "ability": "Dry Skin", - "evs": {"hp": 248, "atk": 132, "def": 116, "spa": 0, "spd": 0, "spe": 12}, - "nature": "Adamant", - "moves": [["Substitute"], ["Bulk Up"], ["Sucker Punch"], ["Drain Punch"]] - } - ] - }, - "umbreon": { - "flags": {}, - "sets": [ - { - "species": "Umbreon", - "gender": "M", - "item": "Leftovers", - "ability": "Synchronize", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Foul Play"]] - }, - { - "species": "Umbreon", - "gender": "M", - "item": "Leftovers", - "ability": "Synchronize", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Calm", - "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Foul Play"]] - } - ] - }, - "vaporeon": { - "flags": {}, - "sets": [ - { - "species": "Vaporeon", - "item": "Leftovers", - "ability": "Water Absorb", - "evs": {"hp": 200, "atk": 0, "def": 252, "spa": 0, "spd": 56, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Calm", - "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Scald"]] - } - ] - }, - "froslass": { - "flags": {}, - "sets": [ - { - "species": "Froslass", - "gender": "F", - "item": "Focus Sash", - "ability": "Cursed Body", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Destiny Bond"], ["Spikes"], ["Taunt"], ["Icy Wind"]] - } - ] - }, - "houndoom": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Houndoom", - "item": "Houndoominite", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Taunt"], ["Fire Blast"], ["Dark Pulse"]] - }, - { - "species": "Houndoom", - "item": "Houndoominite", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Sunny Day"], ["Fire Blast"], ["Dark Pulse"], ["Solar Beam"]] - } - ] - }, - "kyurem": { - "flags": {}, - "sets": [ - { - "species": "Kyurem", - "item": "Choice Scarf", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Draco Meteor"], ["Ice Beam"], ["Earth Power"], ["Outrage"]] - }, - { - "species": "Kyurem", - "item": "Choice Specs", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Ice Beam"], ["Earth Power"], ["Flash Cannon"]] - }, - { - "species": "Kyurem", - "item": "Life Orb", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Roost"], ["Draco Meteor"], ["Ice Beam"], ["Earth Power"]] - }, - { - "species": "Kyurem", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 56, "atk": 0, "def": 0, "spa": 236, "spd": 0, "spe": 216}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Roost"], ["Substitute"], ["Ice Beam"], ["Earth Power"]] - } - ] - }, - "shuckle": { - "flags": {}, - "sets": [ - { - "species": "Shuckle", - "item": "Leftovers", - "ability": "Sturdy", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Stealth Rock"], ["Sticky Web"], ["Encore"], ["Knock Off"]] - } - ] - }, - "tornadus": { - "flags": {}, - "sets": [ - { - "species": "Tornadus", - "gender": "M", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Acrobatics"], ["Knock Off"], ["Superpower"], ["U-turn"]] - }, - { - "species": "Tornadus", - "gender": "M", - "item": "Life Orb", - "ability": "Prankster", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Tailwind"], ["Hurricane"], ["Heat Wave"], ["Grass Knot"]] - } - ] - }, - "yanmega": { - "flags": {}, - "sets": [ - { - "species": "Yanmega", - "item": "Choice Specs", - "ability": "Tinted Lens", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Sleep Talk"], ["Bug Buzz"], ["Air Slash"], ["Giga Drain"]] - }, - { - "species": "Yanmega", - "item": "Life Orb", - "ability": "Speed Boost", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Protect"], ["Bug Buzz"], ["Air Slash"], ["Giga Drain"]] - } - ] - }, - "zoroark": { - "flags": {}, - "sets": [ - { - "species": "Zoroark", - "item": "Choice Specs", - "ability": "Illusion", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Trick"], ["Night Daze"], ["Focus Blast"], ["Flamethrower"]] - }, - { - "species": "Zoroark", - "item": "Life Orb", - "ability": "Illusion", - "evs": {"hp": 0, "atk": 196, "def": 0, "spa": 96, "spd": 0, "spe": 216}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Naive", - "moves": [["Sucker Punch"], ["Knock Off"], ["Flamethrower"], ["Grass Knot"]] - }, - { - "species": "Zoroark", - "item": "Life Orb", - "ability": "Illusion", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Night Daze"], ["Focus Blast"], ["Flamethrower"]] - } - ] - }, - "cresselia": { - "flags": {}, - "sets": [ - { - "species": "Cresselia", - "gender": "F", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Moonlight"], ["Thunder Wave"], ["Psyshock"], ["Moonblast"]] - }, - { - "species": "Cresselia", - "gender": "F", - "item": "Light Clay", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Lunar Dance"], ["Reflect"], ["Light Screen"], ["Moonblast"]] - }, - { - "species": "Cresselia", - "gender": "F", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 116, "spa": 0, "spd": 0, "spe": 144}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Moonlight"], ["Substitute"], ["Calm Mind"], ["Psyshock"]] - }, - { - "species": "Cresselia", - "item": "Light Clay", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Reflect"], ["Light Screen"], ["Lunar Dance"], ["Psyshock"]] - }, - { - "species": "Cresselia", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 136, "spa": 0, "spd": 0, "spe": 120}, - "nature": "Bold", - "moves": [["Substitute"], ["Calm Mind"], ["Moonblast"], ["Moonlight"]] - }, - { - "species": "Cresselia", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 116, "spa": 0, "spd": 0, "spe": 144}, - "nature": "Bold", - "moves": [["Substitute"], ["Calm Mind"], ["Psyshock"], ["Moonblast"]] - } - ] - }, - "gligar": { - "flags": {}, - "sets": [ - { - "species": "Gligar", - "item": "Eviolite", - "ability": "Hyper Cutter", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Roost"], ["Defog"], ["Toxic"], ["Earthquake"]] - }, - { - "species": "Gligar", - "item": "Eviolite", - "ability": "Hyper Cutter", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Roost"], ["Defog"], ["Stealth Rock"], ["Earthquake"]] - }, - { - "species": "Gligar", - "item": "Eviolite", - "ability": "Hyper Cutter", - "evs": {"hp": 248, "atk": 0, "def": 20, "spa": 0, "spd": 240, "spe": 0}, - "nature": "Careful", - "moves": [["Roost"], ["Defog"], ["Toxic"], ["Earthquake"]] - } - ] - }, - "aromatisse": { - "flags": {}, - "sets": [ - { - "species": "Aromatisse", - "item": "Leftovers", - "ability": "Aroma Veil", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Bold", - "moves": [["Protect"], ["Wish"], ["Aromatherapy"], ["Moonblast"]] - }, - { - "species": "Aromatisse", - "item": "Leftovers", - "ability": "Aroma Veil", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Protect"], ["Wish"], ["Aromatherapy"], ["Moonblast"]] - } - ] - }, - "roserade": { - "flags": {}, - "sets": [ - { - "species": "Roserade", - "item": "Life Orb", - "ability": "Natural Cure", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Spikes"], ["Giga Drain"], ["Sludge Bomb"], ["Synthesis"]] - }, - { - "species": "Roserade", - "item": "Black Sludge", - "ability": "Natural Cure", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 244, "spe": 16}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Calm", - "moves": [["Rest"], ["Spikes"], ["Giga Drain"], ["Sludge Bomb"]] - } - ] - }, - "cobalion": { - "flags": {}, - "sets": [ - { - "species": "Cobalion", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Calm Mind"], ["Focus Blast"], ["Flash Cannon"], ["Hidden Power Ghost"]] - }, - { - "species": "Cobalion", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Close Combat"], ["Iron Head"], ["Stone Edge"]] - }, - { - "species": "Cobalion", - "item": "Leftovers", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Stealth Rock"], ["Taunt"], ["Close Combat"], ["Iron Head"]] - } - ] - }, - "dragalge": { - "flags": {}, - "sets": [ - { - "species": "Dragalge", - "item": "Choice Specs", - "ability": "Adaptability", - "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 56}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Sludge Wave"], ["Hidden Power Fire"], ["Focus Blast"]] - }, - { - "species": "Dragalge", - "item": "Choice Specs", - "ability": "Adaptability", - "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 56}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Sludge Wave"], ["Scald"], ["Focus Blast"]] - }, - { - "species": "Dragalge", - "item": "Black Sludge", - "ability": "Adaptability", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Toxic Spikes"], ["Dragon Tail"], ["Sludge Bomb"], ["Scald"]] - }, - { - "species": "Dragalge", - "item": "Dragon Fang", - "ability": "Adaptability", - "evs": {"hp": 188, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 68}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Sludge Bomb"], ["Focus Blast"], ["Dragon Pulse"]] - }, - { - "species": "Dragalge", - "item": "Choice Specs", - "ability": "Adaptability", - "evs": {"hp": 188, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 68}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Dragon Pulse"], ["Sludge Wave"], ["Focus Blast"]] - } - ] - }, - "reuniclus": { - "flags": {}, - "sets": [ - { - "species": "Reuniclus", - "item": "Leftovers", - "ability": "Magic Guard", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Recover"], ["Calm Mind"], ["Psyshock"], ["Focus Blast"]] - }, - { - "species": "Reuniclus", - "item": "Life Orb", - "ability": "Magic Guard", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Recover"], ["Calm Mind"], ["Psyshock"], ["Focus Blast"]] - } - ] - }, - "whimsicott": { - "flags": {}, - "sets": [ - { - "species": "Whimsicott", - "item": "Life Orb", - "ability": "Prankster", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Encore"], ["Giga Drain"], ["Moonblast"], ["Hidden Power Fire"]] - }, - { - "species": "Whimsicott", - "item": "Leftovers", - "ability": "Prankster", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Encore"], ["Taunt"], ["Leech Seed"], ["Moonblast"]] - }, - { - "species": "Whimsicott", - "item": "Life Orb", - "ability": "Prankster", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Moonblast"], ["Giga Drain"], ["Hidden Power Fire"], ["Encore"]] - }, - { - "species": "Whimsicott", - "item": "Leftovers", - "ability": "Prankster", - "evs": {"hp": 248, "atk": 0, "def": 236, "spa": 0, "spd": 0, "spe": 24}, - "nature": "Bold", - "moves": [["Encore"], ["U-turn"], ["Stun Spore"], ["Moonblast"]] - } - ] - }, - "sharpedo": { - "flags": {}, - "sets": [ - { - "species": "Sharpedo", - "item": "Sharpedonite", - "ability": "Speed Boost", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Protect"], ["Waterfall"], ["Crunch"], ["Ice Fang"]] - }, - { - "species": "Sharpedo", - "item": "Sharpedonite", - "ability": "Speed Boost", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Naughty", - "moves": [["Protect"], ["Crunch"], ["Ice Fang"], ["Hydro Pump"]] - }, - { - "species": "Sharpedo", - "item": "Sharpedonite", - "ability": "Speed Boost", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Protect"], ["Destiny Bond"], ["Waterfall"], ["Crunch"]] - }, - { - "species": "Sharpedo", - "item": "Life Orb", - "ability": "Speed Boost", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Protect"], ["Destiny Bond"], ["Waterfall"], ["Crunch"]] - } - ] - }, - "sceptile": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Sceptile", - "item": "Sceptilite", - "ability": "Overgrow", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Giga Drain"], ["Dragon Pulse"], ["Hidden Power Fire"]] - }, - { - "species": "Sceptile", - "item": "Sceptilite", - "ability": "Overgrow", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Leaf Storm"], ["Giga Drain"], ["Dragon Pulse"], ["Hidden Power Fire"]] - }, - { - "species": "Sceptile", - "item": "Sceptilite", - "ability": "Overgrow", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Dragon Pulse"], ["Giga Drain"], ["Focus Blast"], ["Substitute"]] - }, - { - "species": "Sceptile", - "item": "Sceptilite", - "ability": "Overgrow", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Giga Drain"], ["Dragon Pulse"], ["Focus Blast"], ["Leaf Storm"]] - }, - { - "species": "Sceptile", - "item": "Sceptilite", - "ability": "Overgrow", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Leaf Blade"], ["Outrage"], ["Earthquake"]] - }, - { - "species": "Sceptile", - "item": "Sceptilite", - "ability": "Overgrow", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Dragon Pulse"], ["Giga Drain"], ["Focus Blast"], ["Hidden Power Fire"]] - } - ] - }, - "rhyperior": { - "flags": {}, - "sets": [ - { - "species": "Rhyperior", - "item": "Choice Band", - "ability": "Solid Rock", - "evs": {"hp": 168, "atk": 248, "def": 0, "spa": 0, "spd": 0, "spe": 92}, - "nature": "Adamant", - "moves": [["Stone Edge"], ["Earthquake"], ["Megahorn"], ["Aqua Tail"]] - }, - { - "species": "Rhyperior", - "item": "Leftovers", - "ability": "Solid Rock", - "evs": {"hp": 248, "atk": 16, "def": 244, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Adamant", - "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Megahorn"]] - }, - { - "species": "Rhyperior", - "item": "Leftovers", - "ability": "Solid Rock", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Megahorn"]] - } - ] - }, - "bronzong": { - "flags": {}, - "sets": [ - { - "species": "Bronzong", - "item": "Light Clay", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Reflect"], ["Light Screen"], ["Explosion"]] - }, - { - "species": "Bronzong", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0}, - "nature": "Relaxed", - "moves": [["Stealth Rock"], ["Toxic"], ["Gyro Ball"], ["Earthquake"]] - }, - { - "species": "Bronzong", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0}, - "nature": "Sassy", - "moves": [["Stealth Rock"], ["Toxic"], ["Gyro Ball"], ["Earthquake"]] - } - ] - }, - "feraligatr": { - "flags": {}, - "sets": [ - { - "species": "Feraligatr", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 32, "atk": 248, "def": 0, "spa": 0, "spd": 0, "spe": 228}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Waterfall"], ["Ice Punch"], ["Crunch"]] - }, - { - "species": "Feraligatr", - "item": "Life Orb", - "ability": "Torrent", - "evs": {"hp": 52, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 204}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Aqua Jet"], ["Waterfall"], ["Crunch"]] - }, - { - "species": "Feraligatr", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Waterfall"], ["Superpower"], ["Aqua Jet"], ["Swords Dance"]] - }, - { - "species": "Feraligatr", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Waterfall"], ["Ice Punch"], ["Superpower"], ["Dragon Dance"]] - }, - { - "species": "Feraligatr", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Waterfall"], ["Ice Punch"], ["Crunch"], ["Dragon Dance"]] - } - ] - }, - "slurpuff": { - "flags": {}, - "sets": [ - { - "species": "Slurpuff", - "item": "Sitrus Berry", - "ability": "Unburden", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Belly Drum"], ["Play Rough"], ["Drain Punch"], ["Return"]], - "happiness": 255 - }, - { - "species": "Slurpuff", - "item": "Chesto Berry", - "ability": "Unburden", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Rest"], ["Calm Mind"], ["Draining Kiss"], ["Flamethrower"]] - }, - { - "species": "Slurpuff", - "item": "Sitrus Berry", - "ability": "Unburden", - "evs": {"hp": 52, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 204}, - "nature": "Adamant", - "moves": [["Belly Drum"], ["Play Rough"], ["Return"], ["Aromatherapy"]], - "happiness": 255 - } - ] - }, - "pangoro": { - "flags": {}, - "sets": [ - { - "species": "Pangoro", - "item": "Choice Band", - "ability": "Scrappy", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Knock Off"], ["Superpower"], ["Gunk Shot"], ["Ice Punch"]] - }, - { - "species": "Pangoro", - "item": "Life Orb", - "ability": "Iron Fist", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Drain Punch"], ["Knock Off"], ["Gunk Shot"]] - }, - { - "species": "Pangoro", - "item": "Lum Berry", - "ability": "Iron Fist", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Drain Punch"], ["Knock Off"], ["Gunk Shot"]] - } - ] - }, - "abomasnow": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Abomasnow", - "item": "Abomasite", - "ability": "Soundproof", - "evs": {"hp": 0, "atk": 128, "def": 0, "spa": 252, "spd": 0, "spe": 128}, - "nature": "Mild", - "moves": [["Blizzard"], ["Giga Drain"], ["Ice Shard"], ["Focus Blast"]] - }, - { - "species": "Abomasnow", - "item": "Abomasite", - "ability": "Soundproof", - "evs": {"hp": 128, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 128}, - "nature": "Adamant", - "moves": [["Ice Shard"], ["Wood Hammer"], ["Earthquake"], ["Swords Dance"]] - } - ] - } - }, - "RU": { - "venusaur": { - "flags": {}, - "sets": [ - { - "species": "Venusaur", - "item": "Life Orb", - "ability": "Overgrow", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Leaf Storm"], ["Sludge Bomb"], ["Synthesis"], ["Hidden Power Fire"]] - }, - { - "species": "Venusaur", - "item": "Black Sludge", - "ability": "Overgrow", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 92, "spd": 0, "spe": 164}, - "nature": "Modest", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Hidden Power Fire"]] - } - ] - }, - "diancie": { - "flags": {}, - "sets": [ - { - "species": "Diancie", - "item": "Leftovers", - "ability": "Clear Body", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Sassy", - "moves": [["Stealth Rock"], ["Heal Bell"], ["Moonblast"], ["Diamond Storm"]] - }, - { - "species": "Diancie", - "item": "Leftovers", - "ability": "Clear Body", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0}, - "nature": "Bold", - "moves": [["Calm Mind"], ["Rest"], ["Sleep Talk"], ["Moonblast"]] - }, - { - "species": "Diancie", - "item": "Life Orb", - "ability": "Clear Body", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 0}, - "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0}, - "nature": "Quiet", - "moves": [["Trick Room"], ["Moonblast"], ["Earth Power"], ["Psychic", "Diamond Storm", "Explosion"]] - } - ] - }, - "manectric": { - "flags": {}, - "sets": [ - { - "species": "Manectric", - "item": "Life Orb", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Thunderbolt"], ["Flamethrower", "Overheat"], ["Hidden Power Ice"]] - }, - { - "species": "Manectric", - "item": "Choice Scarf", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Thunderbolt"], ["Hidden Power Ice"], ["Overheat", "Switcheroo"]] - } - ] - }, - "hoopa": { - "flags": {}, - "sets": [ - { - "species": "Hoopa", - "item": "Life Orb", - "ability": "Magician", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute", "Nasty Plot"], ["Shadow Ball"], ["Psyshock"], ["Focus Blast"]] - }, - { - "species": "Hoopa", - "item": "Life Orb", - "ability": "Magician", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Mild", - "moves": [["Knock Off"], ["Shadow Ball"], ["Psyshock"], ["Focus Blast"]] - }, - { - "species": "Hoopa", - "item": "Leftovers", - "ability": "Magician", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Nasty Plot"], ["Shadow Ball"], ["Focus Blast"]] - } - ] - }, - "banette": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Banette", - "item": "Banettite", - "ability": "Insomnia", - "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84}, - "nature": "Adamant", - "moves": [["Destiny Bond", "Gunk Shot"], ["Knock Off"], ["Sucker Punch"], ["Will-O-Wisp", "Taunt", "Thunder Wave"]] - } - ] - }, - "jellicent": { - "flags": {}, - "sets": [ - { - "species": "Jellicent", - "item": "Leftovers", - "ability": "Water Absorb", - "evs": {"hp": 252, "atk": 0, "def": 212, "spa": 0, "spd": 0, "spe": 44}, - "nature": "Bold", - "moves": [["Scald", "Hex"], ["Will-O-Wisp"], ["Recover"], ["Taunt"]] - } - ] - }, - "sigilyph": { - "flags": {}, - "sets": [ - { - "species": "Sigilyph", - "item": "Life Orb", - "ability": "Magic Guard", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Air Slash"], ["Heat Wave"], ["Roost"], ["Psychic"]] - }, - { - "species": "Sigilyph", - "item": "Flame Orb", - "ability": "Magic Guard", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Roost"], ["Psycho Shift"], ["Air Slash"]] - } - ] - }, - "gastrodon": { - "flags": {}, - "sets": [ - { - "species": "Gastrodon", - "item": "Leftovers", - "ability": "Storm Drain", - "evs": {"hp": 252, "atk": 0, "def": 244, "spa": 0, "spd": 0, "spe": 12}, - "nature": "Bold", - "moves": [["Scald"], ["Recover"], ["Toxic"], ["Earth Power"]] - } - ] - }, - "delphox": { - "flags": {}, - "sets": [ - { - "species": "Delphox", - "item": "Choice Scarf", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Fire Blast"], ["Psyshock"], ["Dazzling Gleam"], ["Trick", "Overheat"]] - }, - { - "species": "Delphox", - "item": "Choice Specs", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Fire Blast"], ["Psychic"], ["Grass Knot"], ["Flamethrower"]] - }, - { - "species": "Delphox", - "item": "Choice Specs", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Fire Blast"], ["Psychic"], ["Grass Knot"], ["Hidden Power Water"]] - }, - { - "species": "Delphox", - "item": "Life Orb", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Fire Blast"], ["Psychic"], ["Grass Knot"]] - }, - { - "species": "Delphox", - "item": "Life Orb", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Fire Blast"], ["Psychic"], ["Hidden Power Water"]] - }, - { - "species": "Delphox", - "item": "Leftovers", - "ability": "Blaze", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Calm Mind"], ["Flamethrower"], ["Psyshock"]] - } - ] - }, - "clawitzer": { - "flags": {}, - "sets": [ - { - "species": "Clawitzer", - "item": "Life Orb", - "ability": "Mega Launcher", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Scald"], ["Dark Pulse"], ["Ice Beam"], ["Aura Sphere"]] - } - ] - }, - "rotommow": { - "flags": {}, - "sets": [ - { - "species": "Rotom-Mow", - "item": "Choice Specs", - "ability": "Levitate", - "evs": {"hp": 48, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 208}, - "nature": "Timid", - "moves": [["Leaf Storm"], ["Volt Switch"], ["Thunderbolt"], ["Trick"]] - } - ] - }, - "rotom": { - "flags": {}, - "sets": [ - { - "species": "Rotom", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 124, "atk": 0, "def": 0, "spa": 132, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Will-O-Wisp"], ["Discharge"], ["Hex"]] - } - ] - }, - "hitmontop": { - "flags": {}, - "sets": [ - { - "species": "Hitmontop", - "item": "Leftovers", - "ability": "Intimidate", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Impish", - "moves": [["Rapid Spin"], ["Close Combat"], ["Foresight"], ["Toxic"]] - } - ] - }, - "braviary": { - "flags": {}, - "sets": [ - { - "species": "Braviary", - "item": "Choice Scarf", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Brave Bird"], ["Return"], ["Superpower"], ["U-turn"]], - "happiness": 255 - }, - { - "species": "Braviary", - "item": "Life Orb", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Brave Bird"], ["Return"], ["Superpower"], ["Roost"]], - "happiness": 255 - }, - { - "species": "Braviary", - "item": "Leftovers", - "ability": "Defiant", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 212, "spe": 44}, - "nature": "Careful", - "moves": [["Substitute"], ["Bulk Up"], ["Roost"], ["Brave Bird"]] - } - ] - }, - "registeel": { - "flags": {}, - "sets": [ - { - "species": "Registeel", - "item": "Leftovers", - "ability": "Clear Body", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Curse"], ["Iron Head"], ["Rest"], ["Sleep Talk"]] - }, - { - "species": "Registeel", - "item": "Leftovers", - "ability": "Clear Body", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Seismic Toss"], ["Protect"], ["Thunder Wave", "Toxic"], ["Stealth Rock"]] - } - ] - }, - "omastar": { - "flags": {}, - "sets": [ - { - "species": "Omastar", - "item": "Focus Sash", - "ability": "Weak Armor", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Stealth Rock"], ["Spikes"], ["Scald"], ["Ice Beam"]] - }, - { - "species": "Omastar", - "item": "Choice Specs", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Scald"], ["Hidden Power Grass"]] - } - ] - }, - "magneton": { - "flags": {}, - "sets": [ - { - "species": "Magneton", - "item": "Eviolite", - "ability": "Magnet Pull", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Magnet Rise"], ["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Water"]] - }, - { - "species": "Magneton", - "item": "Choice Specs", - "ability": "Analytic", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Volt Switch"], ["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Grass"]] - }, - { - "species": "Magneton", - "item": "Eviolite", - "ability": "Analytic", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Flash Cannon"], ["Hidden Power Grass"]] - } - ] - }, - "jolteon": { - "flags": {}, - "sets": [ - { - "species": "Jolteon", - "item": "Choice Specs", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"], ["Volt Switch"]] - }, - { - "species": "Jolteon", - "item": "Choice Specs", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Water"], ["Volt Switch"]] - }, - { - "species": "Jolteon", - "item": "Choice Specs", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Grass"], ["Volt Switch"]] - }, - { - "species": "Jolteon", - "item": "Life Orb", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"], ["Volt Switch"]] - }, - { - "species": "Jolteon", - "item": "Life Orb", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Water"], ["Volt Switch"]] - }, - { - "species": "Jolteon", - "item": "Life Orb", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Grass"], ["Volt Switch"]] - }, - { - "species": "Jolteon", - "item": "Expert Belt", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"], ["Volt Switch"]] - }, - { - "species": "Jolteon", - "item": "Expert Belt", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Water"], ["Volt Switch"]] - }, - { - "species": "Jolteon", - "item": "Expert Belt", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Grass"], ["Volt Switch"]] - } - ] - }, - "golbat": { - "flags": {}, - "sets": [ - { - "species": "Golbat", - "item": "Eviolite", - "ability": "Infiltrator", - "evs": {"hp": 248, "atk": 0, "def": 180, "spa": 0, "spd": 0, "spe": 80}, - "nature": "Impish", - "moves": [["Taunt"], ["Roost"], ["Brave Bird"], ["Super Fang", "Toxic"]] - } - ] - }, - "exploud": { - "flags": {}, - "sets": [ - { - "species": "Exploud", - "item": "Choice Specs", - "ability": "Scrappy", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Boomburst"], ["Fire Blast"], ["Sleep Talk"], ["Focus Blast"]] - }, - { - "species": "Exploud", - "item": "Life Orb", - "ability": "Scrappy", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Boomburst"], ["Fire Blast"], ["Surf"], ["Focus Blast"]] - } - ] - }, - "eelektross": { - "flags": {}, - "sets": [ - { - "species": "Eelektross", - "item": "Assault Vest", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 0}, - "nature": "Modest", - "moves": [["Volt Switch"], ["Giga Drain"], ["Flamethrower"], ["Knock Off"]] - } - ] - }, - "druddigon": { - "flags": {}, - "sets": [ - { - "species": "Druddigon", - "item": "Rocky Helmet", - "ability": "Rough Skin", - "evs": {"hp": 236, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 20}, - "nature": "Impish", - "moves": [["Dragon Tail"], ["Stealth Rock"], ["Fire Punch"], ["Glare", "Gunk Shot"]] - }, - { - "species": "Druddigon", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 236, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 20}, - "nature": "Adamant", - "moves": [["Outrage", "Dragon Claw"], ["Sucker Punch"], ["Fire Punch"], ["Gunk Shot"]] - } - ] - }, - "accelgor": { - "flags": {}, - "sets": [ - { - "species": "Accelgor", - "item": "Focus Sash", - "ability": "Sticky Hold", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Spikes"], ["Final Gambit"], ["Encore"], ["Bug Buzz"]] - }, - { - "species": "Accelgor", - "item": "Life Orb", - "ability": "Sticky Hold", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Bug Buzz"], ["Focus Blast"], ["Spikes"], ["Sludge Bomb"]] - }, - { - "species": "Accelgor", - "item": "Life Orb", - "ability": "Sticky Hold", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Bug Buzz"], ["Focus Blast"], ["Spikes"], ["Hidden Power Ice"]] - } - ] - }, - "spiritomb": { - "flags": {}, - "sets": [ - { - "species": "Spiritomb", - "item": "Leftovers", - "ability": "Infiltrator", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Calm Mind"], ["Dark Pulse"], ["Rest"], ["Sleep Talk"]] - }, - { - "species": "Spiritomb", - "item": "Leftovers", - "ability": "Infiltrator", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Impish", - "moves": [["Will-O-Wisp"], ["Foul Play"], ["Rest"], ["Sleep Talk"]] - }, - { - "species": "Spiritomb", - "item": "Black Glasses", - "ability": "Infiltrator", - "evs": {"hp": 212, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 44}, - "nature": "Adamant", - "moves": [["Sucker Punch"], ["Pursuit"], ["Will-O-Wisp"], ["Foul Play", "Taunt"]] - } - ] - }, - "drapion": { - "flags": {}, - "sets": [ - { - "species": "Drapion", - "item": "Black Sludge", - "ability": "Battle Armor", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 216, "spe": 44}, - "nature": "Careful", - "moves": [["Knock Off"], ["Taunt"], ["Toxic Spikes"], ["Poison Jab"]] - }, - { - "species": "Drapion", - "item": "Shuca Berry", - "ability": "Battle Armor", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Knock Off"], ["Pursuit"], ["Poison Jab"]] - }, - { - "species": "Drapion", - "item": "Shuca Berry", - "ability": "Battle Armor", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Knock Off"], ["Aqua Tail"], ["Poison Jab"]] - } - ] - }, - "camerupt": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Camerupt", - "item": "Cameruptite", - "ability": "Solid Rock", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Fire Blast", "Flamethrower"], ["Earth Power"], ["Hidden Power Ice"], ["Toxic"]] - } - ] - }, - "bronzong": { - "flags": {}, - "sets": [ - { - "species": "Bronzong", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Brave", - "moves": [["Trick Room"], ["Stealth Rock"], ["Earthquake"], ["Explosion"]] - }, - { - "species": "Bronzong", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Sassy", - "moves": [["Hidden Power Fire"], ["Gyro Ball"], ["Earthquake"], ["Toxic"]] - }, - { - "species": "Bronzong", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Sassy", - "moves": [["Stealth Rock"], ["Gyro Ball"], ["Psywave"], ["Toxic"]] - } - ] - }, - "rhyperior": { - "flags": {}, - "sets": [ - { - "species": "Rhyperior", - "item": "Choice Band", - "ability": "Solid Rock", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Earthquake"], ["Stone Edge"], ["Ice Punch"], ["Megahorn"]] - }, - { - "species": "Rhyperior", - "item": "Life Orb", - "ability": "Solid Rock", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Rock Polish"], ["Earthquake"], ["Stone Edge"], ["Ice Punch", "Swords Dance"]] - }, - { - "species": "Rhyperior", - "item": "Leftovers", - "ability": "Solid Rock", - "evs": {"hp": 248, "atk": 16, "def": 0, "spa": 0, "spd": 244, "spe": 0}, - "nature": "Adamant", - "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Ice Punch", "Megahorn"]] - } - ] - }, - "hitmonlee": { - "flags": {}, - "sets": [ - { - "species": "Hitmonlee", - "item": "Choice Scarf", - "ability": "Reckless", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["High Jump Kick"], ["Knock Off"], ["Rapid Spin"], ["Close Combat"]] - }, - { - "species": "Hitmonlee", - "item": "Life Orb", - "ability": "Reckless", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["High Jump Kick"], ["Knock Off"], ["Mach Punch"], ["Rapid Spin"]] - }, - { - "species": "Hitmonlee", - "item": "Liechi Berry", - "ability": "Unburden", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Endure"], ["Reversal"], ["Knock Off"], ["Mach Punch"]] - } - ] - }, - "glalie": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Glalie", - "item": "Glalitite", - "ability": "Inner Focus", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Spikes"], ["Double-Edge"], ["Explosion"], ["Ice Shard"]] - }, - { - "species": "Glalie", - "item": "Glalitite", - "ability": "Inner Focus", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Double-Edge"], ["Freeze-Dry"], ["Earthquake"], ["Explosion"]] - } - ] - }, - "fletchinder": { - "flags": {}, - "sets": [ - { - "species": "Fletchinder", - "ability": "Gale Wings", - "evs": {"hp": 160, "atk": 252, "def": 72, "spa": 0, "spd": 24, "spe": 0}, - "nature": "Adamant", - "moves": [["Acrobatics"], ["Swords Dance"], ["Will-O-Wisp"], ["Roost"]] - } - ] - }, - "escavalier": { - "flags": {}, - "sets": [ - { - "species": "Escavalier", - "item": "Assault Vest", - "ability": "Overcoat", - "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84}, - "nature": "Adamant", - "moves": [["Megahorn"], ["Iron Head"], ["Knock Off"], ["Drill Run", "Pursuit"]] - }, - { - "species": "Escavalier", - "item": "Choice Band", - "ability": "Overcoat", - "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84}, - "nature": "Adamant", - "moves": [["Megahorn"], ["Iron Head"], ["Knock Off"], ["Drill Run"]] - } - ] - }, - "aromatisse": { - "flags": {}, - "sets": [ - { - "species": "Aromatisse", - "item": "Leftovers", - "ability": "Aroma Veil", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Wish"], ["Protect"], ["Moonblast"], ["Aromatherapy"]] - } - ] - }, - "meloetta": { - "flags": {}, - "sets": [ - { - "species": "Meloetta", - "item": "Assault Vest", - "ability": "Serene Grace", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Psyshock"], ["Hyper Voice"], ["Focus Blast"], ["Shadow Ball", "Grass Knot", "Dazzling Gleam"]] - }, - { - "species": "Meloetta", - "item": "Choice Scarf", - "ability": "Serene Grace", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Dazzling Gleam", "Shadow Ball", "Trick", "U-turn"]] - }, - { - "species": "Meloetta", - "item": "Choice Specs", - "ability": "Serene Grace", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Hyper Voice"], ["Psychic"], ["Focus Blast"], ["U-turn", "Dazzling Gleam", "Shadow Ball"]] - }, - { - "species": "Meloetta", - "item": "Life Orb", - "ability": "Serene Grace", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Relic Song"], ["Return"], ["Close Combat"], ["Knock Off"]], - "happiness": 255 - }, - { - "species": "Meloetta", - "item": "Colbur Berry", - "ability": "Serene Grace", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Hyper Voice", "Psychic"], ["Shadow Ball"], ["Focus Blast"]] - }, - { - "species": "Meloetta", - "item": "Leftovers", - "ability": "Serene Grace", - "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Perish Song"], ["Knock Off"], ["Heal Bell"], ["Thunder Wave"]] - }, - { - "species": "Meloetta", - "item": "Leftovers", - "ability": "Serene Grace", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16}, - "nature": "Modest", - "moves": [["Substitute"], ["Calm Mind"], ["Hyper Voice"], ["Shadow Ball"]] - } - ] - }, - "alomomola": { - "flags": {}, - "sets": [ - { - "species": "Alomomola", - "item": "Leftovers", - "ability": "Regenerator", - "evs": {"hp": 120, "atk": 0, "def": 136, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Scald"], ["Wish"], ["Protect"], ["Toxic"]] - } - ] - }, - "emboar": { - "flags": {}, - "sets": [ - { - "species": "Emboar", - "item": "Choice Band", - "ability": "Reckless", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Flare Blitz"], ["Superpower"], ["Wild Charge"], ["Sucker Punch"]] - }, - { - "species": "Emboar", - "item": "Expert Belt", - "ability": "Reckless", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Flare Blitz"], ["Superpower"], ["Wild Charge"], ["Sucker Punch"]] - }, - { - "species": "Emboar", - "item": "Choice Scarf", - "ability": "Reckless", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Flare Blitz"], ["Superpower"], ["Wild Charge"], ["Toxic"]] - } - ] - }, - "seismitoad": { - "flags": {}, - "sets": [ - { - "species": "Seismitoad", - "item": "Leftovers", - "ability": "Water Absorb", - "evs": {"hp": 200, "atk": 0, "def": 252, "spa": 0, "spd": 56, "spe": 0}, - "nature": "Relaxed", - "moves": [["Stealth Rock"], ["Scald"], ["Earthquake"], ["Knock Off"]] - }, - { - "species": "Seismitoad", - "item": "Life Orb", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Rain Dance"], ["Hydro Pump"], ["Earth Power"], ["Sludge Bomb"]] - }, - { - "species": "Seismitoad", - "item": "Leftovers", - "ability": "Water Absorb", - "evs": {"hp": 164, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 92}, - "nature": "Modest", - "moves": [["Stealth Rock"], ["Hydro Pump"], ["Earth Power"], ["Grass Knot"]] - } - ] - }, - "qwilfish": { - "flags": {}, - "sets": [ - { - "species": "Qwilfish", - "item": "Black Sludge", - "ability": "Intimidate", - "evs": {"hp": 252, "atk": 0, "def": 232, "spa": 0, "spd": 0, "spe": 24}, - "nature": "Bold", - "moves": [["Spikes"], ["Pain Split"], ["Scald"], ["Taunt"]] - }, - { - "species": "Qwilfish", - "item": "Focus Sash", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Spikes"], ["Taunt"], ["Toxic Spikes"], ["Explosion"]] - } - ] - }, - "granbull": { - "flags": {}, - "sets": [ - { - "species": "Granbull", - "item": "Leftovers", - "ability": "Intimidate", - "evs": {"hp": 252, "atk": 0, "def": 232, "spa": 0, "spd": 0, "spe": 24}, - "nature": "Impish", - "moves": [["Play Rough"], ["Earthquake"], ["Heal Bell"], ["Roar"]] - }, - { - "species": "Granbull", - "item": "Choice Band", - "ability": "Intimidate", - "evs": {"hp": 212, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 44}, - "nature": "Adamant", - "moves": [["Play Rough"], ["Fire Punch"], ["Thunder Punch"], ["Close Combat"]] - } - ] - }, - "medicham": { - "flags": {}, - "sets": [ - { - "species": "Medicham", - "item": "Life Orb", - "ability": "Pure Power", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["High Jump Kick"], ["Zen Headbutt"], ["Thunder Punch"], ["Drain Punch"]] - }, - { - "species": "Medicham", - "item": "Choice Scarf", - "ability": "Pure Power", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["High Jump Kick"], ["Zen Headbutt"], ["Rock Slide", "Poison Jab"], ["Drain Punch", "Trick"]] - } - ] - }, - "smeargle": { - "flags": {}, - "sets": [ - { - "species": "Smeargle", - "item": "Focus Sash", - "ability": "Own Tempo", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Spore", "Dark Void"], ["Sticky Web"], ["Stealth Rock"], ["Explosion"]] - } - ] - }, - "absol": { - "flags": {}, - "sets": [ - { - "species": "Absol", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Knock Off"], ["Superpower"], ["Sucker Punch"], ["Iron Tail", "Pursuit"]] - }, - { - "species": "Absol", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Knock Off"], ["Superpower"], ["Sucker Punch"], ["Swords Dance"]] - } - ] - }, - "aerodactyl": { - "flags": {}, - "sets": [ - { - "species": "Aerodactyl", - "item": "Life Orb", - "ability": "Unnerve", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Stone Edge"], ["Fire Fang", "Earthquake"], ["Aerial Ace"], ["Roost"]] - } - ] - }, - "aggron": { - "flags": {}, - "sets": [ - { - "species": "Aggron", - "item": "Choice Band", - "ability": "Rock Head", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Head Smash"], ["Heavy Slam"], ["Sleep Talk", "Fire Punch"], ["Low Kick"]] - } - ] - }, - "blastoise": { - "flags": {}, - "sets": [ - { - "species": "Blastoise", - "item": "Leftovers", - "ability": "Torrent", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8}, - "nature": "Bold", - "moves": [["Scald"], ["Rapid Spin"], ["Toxic"], ["Foresight", "Refresh"]] - } - ] - }, - "slowking": { - "flags": {}, - "sets": [ - { - "species": "Slowking", - "item": "Leftovers", - "ability": "Regenerator", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8}, - "nature": "Bold", - "moves": [["Scald"], ["Psyshock"], ["Calm Mind", "Thunder Wave"], ["Slack Off"]] - }, - { - "species": "Slowking", - "item": "Choice Specs", - "ability": "Regenerator", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8}, - "nature": "Modest", - "moves": [["Scald"], ["Psyshock"], ["Fire Blast"], ["Trick"]] - }, - { - "species": "Slowking", - "item": "Colbur Berry", - "ability": "Regenerator", - "evs": {"hp": 160, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 96}, - "nature": "Bold", - "moves": [["Scald"], ["Psyshock"], ["Fire Blast"], ["Thunder Wave"]] - } - ] - }, - "abomasnow": { - "flags": {}, - "sets": [ - { - "species": "Abomasnow", - "item": "Life Orb", - "ability": "Snow Warning", - "evs": {"hp": 0, "atk": 132, "def": 0, "spa": 252, "spd": 0, "spe": 124}, - "nature": "Mild", - "moves": [["Blizzard"], ["Giga Drain"], ["Ice Shard"], ["Focus Blast"]] - } - ] - }, - "flygon": { - "flags": {}, - "sets": [ - { - "species": "Flygon", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Earth Power"], ["Roost"], ["Fire Blast"]] - }, - { - "species": "Flygon", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Draco Meteor"], ["Earth Power"], ["Roost"], ["Defog"]] - }, - { - "species": "Flygon", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 116, "spa": 0, "spd": 116, "spe": 24}, - "nature": "Careful", - "moves": [["Defog"], ["Roost"], ["Earthquake"], ["U-turn"]] - }, - { - "species": "Flygon", - "item": "Choice Band", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Outrage"], ["Earthquake"], ["U-turn"], ["Iron Tail"]] - } - ] - }, - "scrafty": { - "flags": {}, - "sets": [ - { - "species": "Scrafty", - "item": "Choice Band", - "ability": "Intimidate", - "evs": {"hp": 152, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 104}, - "nature": "Adamant", - "moves": [["Knock Off"], ["High Jump Kick"], ["Drain Punch"], ["Poison Jab"]] - }, - { - "species": "Scrafty", - "item": "Chople Berry", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Knock Off"], ["High Jump Kick"], ["Poison Jab", "Iron Head"], ["Dragon Dance"]] - }, - { - "species": "Scrafty", - "item": "Coba Berry", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Knock Off"], ["High Jump Kick"], ["Head Smash"], ["Dragon Dance"]] - } - ] - }, - "houndoom": { - "flags": {}, - "sets": [ - { - "species": "Houndoom", - "item": "Life Orb", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Fire Blast"], ["Dark Pulse"], ["Sucker Punch"], ["Nasty Plot"]] - }, - { - "species": "Houndoom", - "item": "Life Orb", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 220, "def": 0, "spa": 36, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Fire Blast"], ["Crunch"], ["Sucker Punch"], ["Pursuit"]] - } - ] - }, - "togetic": { - "flags": {}, - "sets": [ - { - "species": "Togetic", - "item": "Eviolite", - "ability": "Serene Grace", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8}, - "nature": "Bold", - "moves": [["Dazzling Gleam"], ["Roost"], ["Flamethrower"], ["Thunder Wave"]] - } - ] - }, - "gallade": { - "flags": {}, - "sets": [ - { - "species": "Gallade", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Close Combat"], ["Zen Headbutt"], ["Knock Off"], ["Swords Dance"]] - }, - { - "species": "Gallade", - "item": "Choice Band", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Close Combat"], ["Zen Headbutt"], ["Knock Off"], ["Drain Punch"]] - } - ] - }, - "virizion": { - "flags": {}, - "sets": [ - { - "species": "Virizion", - "item": "Lum Berry", - "ability": "Justified", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Leaf Blade"], ["Close Combat"], ["Stone Edge", "Zen Headbutt"], ["Swords Dance"]] - }, - { - "species": "Virizion", - "item": "Life Orb", - "ability": "Justified", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Giga Drain"], ["Focus Blast"], ["Hidden Power Ice"], ["Calm Mind"]] - }, - { - "species": "Virizion", - "item": "Leftovers", - "ability": "Justified", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Giga Drain"], ["Focus Blast"], ["Substitute"], ["Calm Mind"]] - } - ] - }, - "uxie": { - "flags": {}, - "sets": [ - { - "species": "Uxie", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 64, "spa": 0, "spd": 0, "spe": 192}, - "nature": "Bold", - "moves": [["Stealth Rock"], ["Psyshock"], ["Thunder Wave"], ["U-turn"]] - } - ] - }, - "sneasel": { - "flags": {}, - "sets": [ - { - "species": "Sneasel", - "item": "Life Orb", - "ability": "Pickpocket", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Knock Off"], ["Icicle Crash"], ["Ice Shard"], ["Low Kick", "Pursuit"]] - } - ] - }, - "samurott": { - "flags": {}, - "sets": [ - { - "species": "Samurott", - "item": "Lum Berry", - "ability": "Shell Armor", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Waterfall"], ["Megahorn"], ["Aqua Jet"]] - } - ] - }, - "gurdurr": { - "flags": {}, - "sets": [ - { - "species": "Gurdurr", - "item": "Eviolite", - "ability": "Guts", - "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Adamant", - "moves": [["Bulk Up"], ["Drain Punch"], ["Knock Off"], ["Mach Punch"]] - } - ] - }, - "poliwrath": { - "flags": {}, - "sets": [ - { - "species": "Poliwrath", - "item": "Leftovers", - "ability": "Water Absorb", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Relaxed", - "moves": [["Scald"], ["Circle Throw"], ["Rest"], ["Sleep Talk"]] - }, - { - "species": "Poliwrath", - "item": "Leftovers", - "ability": "Water Absorb", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8}, - "nature": "Modest", - "moves": [["Hydro Pump", "Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]] - }, - { - "species": "Poliwrath", - "item": "Life Orb", - "ability": "Water Absorb", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8}, - "nature": "Modest", - "moves": [["Hydro Pump", "Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]] - }, - { - "species": "Poliwrath", - "item": "Choice Specs", - "ability": "Water Absorb", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8}, - "nature": "Modest", - "moves": [["Hydro Pump", "Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]] - } - ] - }, - "vivillon": { - "flags": {}, - "sets": [ - { - "species": "Vivillon", - "item": "Leftovers", - "ability": "Compound Eyes", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Sleep Powder"], ["Quiver Dance"], ["Hurricane"], ["Substitute"]] - } - ] - }, - "audino": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Audino", - "item": "Audinite", - "ability": "Regenerator", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8}, - "nature": "Modest", - "moves": [["Dazzling Gleam"], ["Fire Blast"], ["Surf"], ["Healing Wish"]] - } - ] - }, - "mesprit": { - "flags": {}, - "sets": [ - { - "species": "Mesprit", - "item": "Colbur Berry", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Psychic"], ["Dazzling Gleam", "Ice Beam"], ["Stealth Rock"], ["Healing Wish"]] - } - ] - }, - "archeops": { - "flags": {}, - "sets": [ - { - "species": "Archeops", - "item": "Focus Sash", - "ability": "Defeatist", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Stealth Rock"], ["Taunt"], ["Endeavor"], ["Head Smash"]] - } - ] - }, - "malamar": { - "flags": {}, - "sets": [ - { - "species": "Malamar", - "item": "Leftovers", - "ability": "Contrary", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 108, "spe": 152}, - "nature": "Jolly", - "moves": [["Superpower"], ["Knock Off"], ["Rest"], ["Sleep Talk"]] - } - ] - }, - "roselia": { - "flags": {}, - "sets": [ - { - "species": "Roselia", - "item": "Eviolite", - "ability": "Natural Cure", - "evs": {"hp": 248, "atk": 0, "def": 172, "spa": 0, "spd": 88, "spe": 0}, - "nature": "Calm", - "moves": [["Spikes"], ["Synthesis"], ["Giga Drain"], ["Sludge Bomb"]] - } - ] - }, - "piloswine": { - "flags": {}, - "sets": [ - { - "species": "Piloswine", - "item": "Eviolite", - "ability": "Thick Fat", - "evs": {"hp": 240, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 16}, - "nature": "Adamant", - "moves": [["Stealth Rock"], ["Ice Shard"], ["Earthquake"], ["Icicle Crash"]] - } - ] - }, - "sawk": { - "flags": {}, - "sets": [ - { - "species": "Sawk", - "item": "Choice Band", - "ability": "Sturdy", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Close Combat"], ["Knock Off"], ["Zen Headbutt"], ["Stone Edge"]] - }, - { - "species": "Sawk", - "item": "Expert Belt", - "ability": "Mold Breaker", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Close Combat"], ["Knock Off"], ["Stone Edge"], ["Zen Headbutt"]] - }, - { - "species": "Sawk", - "item": "Lum Berry", - "ability": "Mold Breaker", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Close Combat"], ["Knock Off"], ["Earthquake"], ["Stone Edge"]] - }, - { - "species": "Sawk", - "item": "Choice Scarf", - "ability": "Sturdy", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Close Combat"], ["Knock Off"], ["Stone Edge"], ["Zen Headbutt"]] - } - ] - } - }, - "NU": { - "dodrio": { - "flags": {}, - "sets": [ - { - "species": "Dodrio", - "item": "Choice Band", - "ability": "Early Bird", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Brave Bird"], ["Return"], ["Knock Off"], ["Quick Attack"]], - "happiness": 255 - } - ] - }, - "chatot": { - "flags": {}, - "sets": [ - { - "species": "Chatot", - "item": "Choice Scarf", - "ability": "Keen Eye", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Boomburst"], ["Chatter"], ["U-turn"], ["Hidden Power Grass"]] - }, - { - "species": "Chatot", - "item": "Choice Specs", - "ability": "Keen Eye", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Boomburst"], ["Chatter"], ["U-turn"], ["Hidden Power Grass"]] - }, - { - "species": "Chatot", - "item": "Leftovers", - "ability": "Tangled Feet", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Boomburst"], ["Chatter"], ["Nasty Plot"], ["Encore"]] - } - ] - }, - "carracosta": { - "flags": {}, - "sets": [ - { - "species": "Carracosta", - "item": "Life Orb", - "ability": "Solid Rock", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Shell Smash"], ["Waterfall"], ["Stone Edge"], ["Aqua Jet"]] - }, - { - "species": "Carracosta", - "item": "Leftovers", - "ability": "Solid Rock", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Relaxed", - "moves": [["Stealth Rock"], ["Scald"], ["Rock Slide"], ["Knock Off", "Toxic"]] - }, - { - "species": "Carracosta", - "item": "Life Orb", - "ability": "Solid Rock", - "evs": {"hp": 0, "atk": 28, "def": 0, "spa": 228, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Shell Smash"], ["Hydro Pump"], ["Stone Edge"], ["Ice Beam"]] - } - ] - }, - "beheeyem": { - "flags": {}, - "sets": [ - { - "species": "Beheeyem", - "item": "Life Orb", - "ability": "Analytic", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 252, "spd": 0, "spe": 0}, - "nature": "Quiet", - "moves": [["Trick Room"], ["Psychic"], ["Thunderbolt"], ["Hidden Power Fighting"]] - }, - { - "species": "Beheeyem", - "item": "Choice Specs", - "ability": "Analytic", - "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 124}, - "nature": "Modest", - "moves": [["Psychic", "Psyshock"], ["Signal Beam"], ["Hidden Power Ground"], ["Trick", "Thunderbolt"]] - } - ] - }, - "basculin": { - "flags": {}, - "sets": [ - { - "species": "Basculin", - "item": "Choice Band", - "ability": "Adaptability", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Waterfall"], ["Aqua Jet"], ["Zen Headbutt"], ["Superpower"]] - }, - { - "species": "Basculin", - "item": "Splash Plate", - "ability": "Adaptability", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Waterfall"], ["Aqua Jet"], ["Double-Edge"], ["Superpower"]] - } - ] - }, - "barbaracle": { - "flags": {}, - "sets": [ - { - "species": "Barbaracle", - "item": "Shuca Berry", - "ability": "Tough Claws", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Shell Smash"], ["Razor Shell"], ["Return"], ["Earthquake", "Substitute"]], - "happiness": 255 - } - ] - }, - "aurorus": { - "flags": {}, - "sets": [ - { - "species": "Aurorus", - "item": "Choice Specs", - "ability": "Refrigerate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Hyper Voice"], ["Freeze-Dry"], ["Psychic", "Frost Breath"], ["Earth Power"]] - }, - { - "species": "Aurorus", - "item": "Focus Sash", - "ability": "Snow Warning", - "evs": {"hp": 0, "atk": 32, "def": 0, "spa": 224, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Stealth Rock"], ["Blizzard"], ["Freeze-Dry"], ["Rock Tomb"]] - } - ] - }, - "articuno": { - "flags": {}, - "sets": [ - { - "species": "Articuno", - "item": "Life Orb", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Ice Beam"], ["Roost"], ["Hurricane"], ["Freeze-Dry"]] - }, - { - "species": "Articuno", - "item": "Life Orb", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Hidden Power Fire"], ["Roost"], ["Hurricane"], ["Freeze-Dry"]] - }, - { - "species": "Articuno", - "item": "Leftovers", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Roost"], ["Hurricane"], ["Freeze-Dry"]] - } - ] - }, - "zangoose": { - "flags": {}, - "sets": [ - { - "species": "Zangoose", - "item": "Toxic Orb", - "ability": "Toxic Boost", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Facade"], ["Knock Off"], ["Quick Attack"], ["Close Combat"]] - } - ] - }, - "xatu": { - "flags": {}, - "sets": [ - { - "species": "Xatu", - "item": "Colbur Berry", - "ability": "Magic Bounce", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16}, - "nature": "Timid", - "moves": [["Psychic", "Psyshock"], ["Roost"], ["Heat Wave"], ["U-turn", "Thunder Wave"]] - }, - { - "species": "Xatu", - "item": "Leftovers", - "ability": "Magic Bounce", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16}, - "nature": "Timid", - "moves": [["Calm Mind"], ["Roost"], ["Psyshock"], ["Heat Wave", "Signal Beam"]] - }, - { - "species": "Xatu", - "item": "Life Orb", - "ability": "Magic Bounce", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Psychic", "Psyshock"], ["Grass Knot"], ["Heat Wave"], ["Roost"]] - } - ] - }, - "weezing": { - "flags": {}, - "sets": [ - { - "species": "Weezing", - "item": "Black Sludge", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 0, "spd": 0, "spe": 108}, - "nature": "Bold", - "moves": [["Will-O-Wisp"], ["Sludge Bomb"], ["Taunt"], ["Pain Split"]] - }, - { - "species": "Weezing", - "item": "Black Sludge", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 0, "spd": 0, "spe": 108}, - "nature": "Bold", - "moves": [["Will-O-Wisp"], ["Sludge Bomb"], ["Taunt"], ["Toxic Spikes"]] - } - ] - }, - "vivillon": { - "flags": {}, - "sets": [ - { - "species": "Vivillon", - "item": "Leftovers", - "ability": "Compound Eyes", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Quiver Dance"], ["Sleep Powder"], ["Hurricane"], ["Substitute"]] - }, - { - "species": "Vivillon", - "item": "Focus Sash", - "ability": "Compound Eyes", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Sleep Powder"], ["Quiver Dance"], ["Hurricane"], ["Energy Ball"]] - } - ] - }, - "vileplume": { - "flags": {}, - "sets": [ - { - "species": "Vileplume", - "item": "Black Sludge", - "ability": "Effect Spore", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0}, - "nature": "Bold", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Aromatherapy", "Sleep Powder"]] - }, - { - "species": "Vileplume", - "item": "Black Sludge", - "ability": "Effect Spore", - "evs": {"hp": 112, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 144}, - "nature": "Modest", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fire"], ["Synthesis"]] - }, - { - "species": "Vileplume", - "item": "Black Sludge", - "ability": "Effect Spore", - "evs": {"hp": 112, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 144}, - "nature": "Modest", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Ground"], ["Synthesis"]] - } - ] - }, - "swellow": { - "flags": {}, - "sets": [ - { - "species": "Swellow", - "item": "Choice Specs", - "ability": "Scrappy", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Boomburst"], ["U-turn"], ["Heat Wave"], ["Sleep Talk"]] - }, - { - "species": "Swellow", - "item": "Choice Specs", - "ability": "Scrappy", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Boomburst"], ["U-turn"], ["Heat Wave"], ["Hidden Power Grass"]] - }, - { - "species": "Swellow", - "item": "Toxic Orb", - "ability": "Guts", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Facade"], ["Brave Bird"], ["U-turn"], ["Quick Attack"]] - } - ] - }, - "sandslash": { - "flags": {}, - "sets": [ - { - "species": "Sandslash", - "item": "Lum Berry", - "ability": "Sand Rush", - "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84}, - "nature": "Adamant", - "moves": [["Rapid Spin"], ["Knock Off"], ["Earthquake"], ["Stealth Rock"]] - } - ] - }, - "samurott": { - "flags": {}, - "sets": [ - { - "species": "Samurott", - "item": "Life Orb", - "ability": "Torrent", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Rash", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Aqua Jet"], ["Megahorn", "Taunt"]] - }, - { - "species": "Samurott", - "item": "Life Orb", - "ability": "Torrent", - "evs": {"hp": 120, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 136}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Waterfall"], ["Aqua Jet"], ["Megahorn"]] - }, - { - "species": "Samurott", - "item": "Lum Berry", - "ability": "Torrent", - "evs": {"hp": 120, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 136}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Waterfall"], ["Aqua Jet"], ["Megahorn"]] - } - ] - }, - "rotomfan": { - "flags": {}, - "sets": [ - { - "species": "Rotom-Fan", - "item": "Choice Scarf", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Air Slash"], ["Volt Switch"], ["Trick"], ["Thunderbolt"]] - }, - { - "species": "Rotom-Fan", - "item": "Expert Belt", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Air Slash"], ["Hidden Power Water"], ["Will-O-Wisp"]] - }, - { - "species": "Rotom-Fan", - "item": "Expert Belt", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Air Slash"], ["Hidden Power Grass"], ["Will-O-Wisp"]] - } - ] - }, - "rotom": { - "flags": {}, - "sets": [ - { - "species": "Rotom", - "item": "Choice Scarf", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Shadow Ball"], ["Thunderbolt"], ["Trick"]] - }, - { - "species": "Rotom", - "item": "Choice Specs", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Shadow Ball"], ["Thunderbolt"], ["Trick"]] - }, - { - "species": "Rotom", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 108, "spa": 0, "spd": 0, "spe": 148}, - "nature": "Timid", - "moves": [["Will-O-Wisp"], ["Shadow Ball"], ["Volt Switch"], ["Pain Split"]] - }, - { - "species": "Rotom", - "item": "Spell Tag", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Will-O-Wisp"], ["Hex"], ["Volt Switch"], ["Discharge", "Shadow Ball"]] - } - ] - }, - "rhydon": { - "flags": {}, - "sets": [ - { - "species": "Rhydon", - "item": "Eviolite", - "ability": "Lightning Rod", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Earthquake"], ["Stone Edge"], ["Rock Polish"]] - }, - { - "species": "Rhydon", - "item": "Eviolite", - "ability": "Lightning Rod", - "evs": {"hp": 252, "atk": 16, "def": 0, "spa": 0, "spd": 240, "spe": 0}, - "nature": "Adamant", - "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Megahorn"]] - } - ] - }, - "regirock": { - "flags": {}, - "sets": [ - { - "species": "Regirock", - "item": "Leftovers", - "ability": "Clear Body", - "evs": {"hp": 252, "atk": 44, "def": 16, "spa": 0, "spd": 196, "spe": 0}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Stone Edge", "Rock Slide"], ["Thunder Wave", "Toxic"], ["Drain Punch", "Earthquake"]] - } - ] - }, - "pyroar": { - "flags": {}, - "sets": [ - { - "species": "Pyroar", - "item": "Life Orb", - "ability": "Unnerve", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Fire Blast"], ["Hyper Voice"], ["Hidden Power Grass"], ["Will-O-Wisp"]] - }, - { - "species": "Pyroar", - "item": "Choice Specs", - "ability": "Unnerve", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Fire Blast"], ["Hyper Voice"], ["Hidden Power Grass"], ["Flamethrower", "Overheat"]] - } - ] - }, - "primeape": { - "flags": {}, - "sets": [ - { - "species": "Primeape", - "item": "Choice Band", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Close Combat"], ["U-turn"], ["Stone Edge"], ["Earthquake", "Gunk Shot"]] - }, - { - "species": "Primeape", - "item": "Expert Belt", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Close Combat"], ["U-turn"], ["Stone Edge"], ["Encore"]] - } - ] - }, - "pawniard": { - "flags": {}, - "sets": [ - { - "species": "Pawniard", - "item": "Eviolite", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Knock Off"], ["Iron Head"], ["Sucker Punch"]] - } - ] - }, - "musharna": { - "flags": {}, - "sets": [ - { - "species": "Musharna", - "item": "Leftovers", - "ability": "Synchronize", - "evs": {"hp": 240, "atk": 0, "def": 252, "spa": 0, "spd": 16, "spe": 0}, - "nature": "Bold", - "moves": [["Calm Mind"], ["Psyshock"], ["Heal Bell", "Signal Beam"], ["Moonlight"]] - }, - { - "species": "Musharna", - "item": "Leftovers", - "ability": "Synchronize", - "evs": {"hp": 240, "atk": 0, "def": 252, "spa": 0, "spd": 16, "spe": 0}, - "nature": "Bold", - "moves": [["Calm Mind"], ["Barrier"], ["Moonlight"], ["Stored Power"]] - } - ] - }, - "muk": { - "flags": {}, - "sets": [ - { - "species": "Muk", - "item": "Assault Vest", - "ability": "Poison Touch", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Adamant", - "moves": [["Gunk Shot"], ["Poison Jab"], ["Fire Punch"], ["Ice Punch"]] - }, - { - "species": "Muk", - "item": "Choice Band", - "ability": "Poison Touch", - "evs": {"hp": 220, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 36}, - "nature": "Adamant", - "moves": [["Gunk Shot"], ["Shadow Sneak"], ["Focus Punch"], ["Ice Punch"]] - } - ] - }, - "mismagius": { - "flags": {}, - "sets": [ - { - "species": "Mismagius", - "item": "Colbur Berry", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Taunt"], ["Shadow Ball"], ["Dazzling Gleam"], ["Destiny Bond"]] - }, - { - "species": "Mismagius", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Taunt"], ["Shadow Ball"], ["Dazzling Gleam"], ["Nasty Plot"]] - }, - { - "species": "Mismagius", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Taunt"], ["Will-O-Wisp"], ["Hex"], ["Pain Split"]] - } - ] - }, - "miltank": { - "flags": {}, - "sets": [ - { - "species": "Miltank", - "item": "Leftovers", - "ability": "Scrappy", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Curse"], ["Body Slam"], ["Milk Drink"], ["Heal Bell"]] - }, - { - "species": "Miltank", - "item": "Leftovers", - "ability": "Sap Sipper", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16}, - "nature": "Impish", - "moves": [["Body Slam"], ["Milk Drink"], ["Toxic", "Thunder Wave"], ["Heal Bell"]] - }, - { - "species": "Miltank", - "item": "Leftovers", - "ability": "Sap Sipper", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16}, - "nature": "Impish", - "moves": [["Body Slam"], ["Milk Drink"], ["Toxic", "Thunder Wave"], ["Stealth Rock"]] - } - ] - }, - "mesprit": { - "flags": {}, - "sets": [ - { - "species": "Mesprit", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Psychic", "Psyshock"], ["Signal Beam", "Ice Beam"], ["Energy Ball"], ["Healing Wish", "Calm Mind"]] - }, - { - "species": "Mesprit", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Psychic", "Psyshock"], ["Signal Beam", "Ice Beam"], ["Hidden Power Ground"], ["Healing Wish", "Calm Mind"]] - }, - { - "species": "Mesprit", - "item": "Choice Scarf", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Psychic"], ["Ice Beam", "Signal Beam"], ["U-turn"], ["Healing Wish"]] - }, - { - "species": "Mesprit", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16}, - "nature": "Bold", - "moves": [["Stealth Rock"], ["Psychic"], ["U-turn"], ["Thunder Wave", "Healing Wish"]] - } - ] - }, - "mantine": { - "flags": {}, - "sets": [ - { - "species": "Mantine", - "item": "Leftovers", - "ability": "Water Absorb", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 16, "spe": 0}, - "nature": "Calm", - "moves": [["Defog"], ["Scald"], ["Air Slash"], ["Toxic"]] - }, - { - "species": "Mantine", - "item": "Life Orb", - "ability": "Swift Swim", - "evs": {"hp": 32, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 224}, - "nature": "Modest", - "moves": [["Air Slash"], ["Hydro Pump"], ["Ice Beam"], ["Rain Dance"]] - } - ] - }, - "malamar": { - "flags": {}, - "sets": [ - { - "species": "Malamar", - "item": "Leftovers", - "ability": "Contrary", - "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Rest"], ["Sleep Talk"], ["Superpower"], ["Knock Off"]] - }, - { - "species": "Malamar", - "item": "Choice Scarf", - "ability": "Contrary", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Superpower"], ["Knock Off"], ["Psycho Cut"], ["Switcheroo"]] - } - ] - }, - "magmortar": { - "flags": {}, - "sets": [ - { - "species": "Magmortar", - "item": "Assault Vest", - "ability": "Vital Spirit", - "evs": {"hp": 64, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 192}, - "nature": "Modest", - "moves": [["Fire Blast"], ["Thunderbolt"], ["Focus Blast"], ["Flame Charge", "Earthquake"]] - }, - { - "species": "Magmortar", - "item": "Assault Vest", - "ability": "Vital Spirit", - "evs": {"hp": 64, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 192}, - "nature": "Modest", - "moves": [["Fire Blast"], ["Thunderbolt"], ["Hidden Power Grass"], ["Flame Charge", "Earthquake"]] - }, - { - "species": "Magmortar", - "item": "Life Orb", - "ability": "Vital Spirit", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Mild", - "moves": [["Fire Blast"], ["Thunderbolt"], ["Earthquake"], ["Focus Blast"]] - }, - { - "species": "Magmortar", - "item": "Life Orb", - "ability": "Vital Spirit", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Mild", - "moves": [["Fire Blast"], ["Thunderbolt"], ["Earthquake"], ["Hidden Power Grass"]] - } - ] - }, - "ludicolo": { - "flags": {}, - "sets": [ - { - "species": "Ludicolo", - "item": "Life Orb", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Hydro Pump"], ["Giga Drain"], ["Ice Beam"], ["Rain Dance"]] - } - ] - }, - "lilligant": { - "flags": {}, - "sets": [ - { - "species": "Lilligant", - "item": "Life Orb", - "ability": "Own Tempo", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Quiver Dance"], ["Sleep Powder"], ["Giga Drain"], ["Hidden Power Fire"]] - }, - { - "species": "Lilligant", - "item": "Life Orb", - "ability": "Own Tempo", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Quiver Dance"], ["Sleep Powder"], ["Giga Drain"], ["Hidden Power Ice"]] - }, - { - "species": "Lilligant", - "item": "Choice Scarf", - "ability": "Own Tempo", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Sleep Powder"], ["Leaf Storm"], ["Hidden Power Rock"], ["Healing Wish"]] - } - ] - }, - "liepard": { - "flags": {}, - "sets": [ - { - "species": "Liepard", - "item": "Black Glasses", - "ability": "Prankster", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Dark Pulse"], ["Copycat"], ["Encore"]] - }, - { - "species": "Liepard", - "item": "Black Glasses", - "ability": "Prankster", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Knock Off"], ["Encore"], ["Sucker Punch"], ["U-turn"]] - } - ] - }, - "lanturn": { - "flags": {}, - "sets": [ - { - "species": "Lanturn", - "item": "Choice Specs", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 72, "spe": 184}, - "nature": "Modest", - "moves": [["Hydro Pump", "Scald"], ["Volt Switch"], ["Ice Beam", "Signal Beam"], ["Hidden Power Fire"]] - }, - { - "species": "Lanturn", - "item": "Choice Specs", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 72, "spe": 184}, - "nature": "Modest", - "moves": [["Hydro Pump", "Scald"], ["Volt Switch"], ["Ice Beam", "Signal Beam"], ["Hidden Power Grass"]] - }, - { - "species": "Lanturn", - "item": "Leftovers", - "ability": "Volt Absorb", - "evs": {"hp": 40, "atk": 0, "def": 152, "spa": 0, "spd": 208, "spe": 108}, - "nature": "Calm", - "moves": [["Scald"], ["Volt Switch"], ["Heal Bell"], ["Toxic", "Thunder Wave", "Protect"]] - }, - { - "species": "Lanturn", - "item": "Assault Vest", - "ability": "Volt Absorb", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 144, "spe": 112}, - "nature": "Modest", - "moves": [["Scald"], ["Volt Switch"], ["Ice Beam"], ["Hidden Power Fire"]] - } - ] - }, - "klinklang": { - "flags": {}, - "sets": [ - { - "species": "Klinklang", - "item": "Leftovers", - "ability": "Clear Body", - "evs": {"hp": 92, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 164}, - "nature": "Adamant", - "moves": [["Shift Gear"], ["Gear Grind"], ["Return"], ["Substitute"]], - "happiness": 255 - } - ] - }, - "kangaskhan": { - "flags": {}, - "sets": [ - { - "species": "Kangaskhan", - "gender": "F", - "item": "Silk Scarf", - "ability": "Scrappy", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Fake Out"], ["Double-Edge"], ["Sucker Punch"], ["Earthquake"]] - } - ] - }, - "kabutops": { - "flags": {}, - "sets": [ - { - "species": "Kabutops", - "item": "Life Orb", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Rapid Spin"], ["Stone Edge"], ["Aqua Jet"], ["Waterfall"]] - }, - { - "species": "Kabutops", - "item": "Life Orb", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Stone Edge"], ["Aqua Jet"], ["Superpower", "Waterfall"]] - } - ] - }, - "jynx": { - "flags": {}, - "sets": [ - { - "species": "Jynx", - "item": "Choice Scarf", - "ability": "Dry Skin", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Ice Beam"], ["Psychic"], ["Focus Blast"], ["Trick"]] - }, - { - "species": "Jynx", - "item": "Focus Sash", - "ability": "Dry Skin", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Lovely Kiss"], ["Ice Beam"], ["Psychic"], ["Focus Blast", "Nasty Plot"]] - }, - { - "species": "Jynx", - "item": "Life Orb", - "ability": "Dry Skin", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Lovely Kiss"], ["Nasty Plot"], ["Psychic"], ["Ice Beam"]] - } - ] - }, - "hariyama": { - "flags": {}, - "sets": [ - { - "species": "Hariyama", - "item": "Assault Vest", - "ability": "Thick Fat", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Adamant", - "moves": [["Close Combat"], ["Knock Off"], ["Bullet Punch"], ["Fake Out", "Earthquake"]] - }, - { - "species": "Hariyama", - "item": "Choice Band", - "ability": "Guts", - "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Adamant", - "moves": [["Close Combat"], ["Knock Off"], ["Earthquake"], ["Bullet Punch"]] - } - ] - }, - "golurk": { - "flags": {}, - "sets": [ - { - "species": "Golurk", - "item": "Choice Band", - "ability": "Iron Fist", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Shadow Punch"], ["Earthquake"], ["Ice Punch"], ["Zen Headbutt", "Thunder Punch"]] - }, - { - "species": "Golurk", - "item": "Colbur Berry", - "ability": "No Guard", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Stealth Rock"], ["Earthquake"], ["Shadow Punch"], ["Dynamic Punch"]] - }, - { - "species": "Golurk", - "item": "Life Orb", - "ability": "Iron Fist", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Rock Polish"], ["Earthquake"], ["Shadow Punch"], ["Ice Punch"]] - } - ] - }, - "garbodor": { - "flags": {}, - "sets": [ - { - "species": "Garbodor", - "item": "Rocky Helmet", - "ability": "Aftermath", - "evs": {"hp": 252, "atk": 0, "def": 160, "spa": 0, "spd": 0, "spe": 96}, - "nature": "Impish", - "moves": [["Spikes"], ["Gunk Shot"], ["Drain Punch"], ["Toxic Spikes"]] - }, - { - "species": "Garbodor", - "item": "Rocky Helmet", - "ability": "Aftermath", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Spikes"], ["Gunk Shot"], ["Drain Punch"], ["Seed Bomb"]] - } - ] - }, - "ferroseed": { - "flags": {}, - "sets": [ - { - "species": "Ferroseed", - "item": "Eviolite", - "ability": "Iron Barbs", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Relaxed", - "moves": [["Spikes"], ["Gyro Ball", "Knock Off"], ["Leech Seed"], ["Protect"]] - }, - { - "species": "Ferroseed", - "item": "Eviolite", - "ability": "Iron Barbs", - "evs": {"hp": 252, "atk": 0, "def": 112, "spa": 0, "spd": 144, "spe": 0}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Seed Bomb"], ["Leech Seed"], ["Thunder Wave"]] - } - ] - }, - "exeggutor": { - "flags": {}, - "sets": [ - { - "species": "Exeggutor", - "item": "Life Orb", - "ability": "Chlorophyll", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Giga Drain"], ["Psychic"], ["Hidden Power Fire"], ["Sleep Powder"]] - }, - { - "species": "Exeggutor", - "item": "Choice Specs", - "ability": "Chlorophyll", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Psychic"], ["Leaf Storm"], ["Giga Drain"], ["Hidden Power Fire"]] - }, - { - "species": "Exeggutor", - "item": "Lum Berry", - "ability": "Harvest", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 176, "spd": 0, "spe": 84}, - "nature": "Modest", - "moves": [["Sleep Powder"], ["Giga Drain"], ["Psychic"], ["Rest"]] - } - ] - }, - "electivire": { - "flags": {}, - "sets": [ - { - "species": "Electivire", - "item": "Life Orb", - "ability": "Motor Drive", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Wild Charge"], ["Earthquake"], ["Ice Punch"], ["Hidden Power Grass"]] - } - ] - }, - "cryogonal": { - "flags": {}, - "sets": [ - { - "species": "Cryogonal", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Rapid Spin"], ["Freeze-Dry"], ["Frost Breath"], ["Recover"]] - }, - { - "species": "Cryogonal", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Rapid Spin"], ["Freeze-Dry"], ["Hidden Power Ground"], ["Recover"]] - } - ] - }, - "crustle": { - "flags": {}, - "sets": [ - { - "species": "Crustle", - "item": "Custap Berry", - "ability": "Sturdy", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Stealth Rock"], ["Spikes"], ["Rock Blast"], ["Knock Off"]] - } - ] - }, - "cacturne": { - "flags": {}, - "sets": [ - { - "species": "Cacturne", - "item": "Life Orb", - "ability": "Water Absorb", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Rash", - "moves": [["Dark Pulse"], ["Giga Drain"], ["Sucker Punch"], ["Destiny Bond"]] - } - ] - }, - "audino": { - "flags": { - "megaOnly": 1 - }, - "sets": [ - { - "species": "Audino", - "item": "Audinite", - "ability": "Regenerator", - "evs": {"hp": 252, "atk": 0, "def": 208, "spa": 48, "spd": 0, "spe": 0}, - "nature": "Bold", - "moves": [["Calm Mind"], ["Dazzling Gleam"], ["Wish"], ["Protect"]] - }, - { - "species": "Audino", - "item": "Audinite", - "ability": "Regenerator", - "evs": {"hp": 252, "atk": 0, "def": 208, "spa": 48, "spd": 0, "spe": 0}, - "nature": "Bold", - "moves": [["Calm Mind"], ["Dazzling Gleam"], ["Rest"], ["Sleep Talk"]] - }, - { - "species": "Audino", - "item": "Audinite", - "ability": "Regenerator", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Calm Mind", "Healing Wish"], ["Dazzling Gleam"], ["Fire Blast"], ["Surf", "Thunder Wave", "Psychic"]] - }, - { - "species": "Audino", - "item": "Audinite", - "ability": "Regenerator", - "evs": {"hp": 252, "atk": 0, "def": 128, "spa": 0, "spd": 128, "spe": 0}, - "nature": "Calm", - "moves": [["Wish"], ["Protect"], ["Heal Bell"], ["Dazzling Gleam"]] - } - ] - }, - "archeops": { - "flags": {}, - "sets": [ - { - "species": "Archeops", - "ability": "Defeatist", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Taunt"], ["Roost"], ["Acrobatics"], ["Earth Power"]] - }, - { - "species": "Archeops", - "ability": "Defeatist", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Taunt"], ["Roost"], ["Acrobatics"], ["Defog"]] - }, - { - "species": "Archeops", - "ability": "Defeatist", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Defog"], ["Roost"], ["Acrobatics"], ["Earth Power"]] - }, - { - "species": "Archeops", - "item": "Focus Sash", - "ability": "Defeatist", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Stealth Rock"], ["Taunt"], ["Endeavor"], ["Head Smash"]] - }, - { - "species": "Archeops", - "ability": "Defeatist", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Acrobatics"], ["Stone Edge"], ["Earth Power"], ["Roost"]] - } - ] - }, - "claydol": { - "flags": {}, - "sets": [ - { - "species": "Claydol", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Rapid Spin"], ["Earth Power"], ["Shadow Ball"], ["Psychic", "Psyshock"]] - } - ] - }, - "tauros": { - "flags": {}, - "sets": [ - { - "species": "Tauros", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Rock Climb"], ["Earthquake"], ["Fire Blast"], ["Iron Tail", "Zen Headbutt"]] - } - ] - }, - "mawile": { - "flags": {}, - "sets": [ - { - "species": "Mawile", - "item": "Life Orb", - "ability": "Sheer Force", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naughty", - "moves": [["Play Rough"], ["Iron Head"], ["Fire Blast"], ["Sucker Punch"]] - } - ] - }, - "scyther": { - "flags": {}, - "sets": [ - { - "species": "Scyther", - "item": "Eviolite", - "ability": "Technician", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Aerial Ace"], ["U-turn"], ["Roost"]] - }, - { - "species": "Scyther", - "item": "Choice Band", - "ability": "Technician", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["U-turn"], ["Aerial Ace"], ["Knock Off", "Pursuit"], ["Quick Attack"]] - }, - { - "species": "Scyther", - "item": "Choice Scarf", - "ability": "Technician", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["U-turn"], ["Aerial Ace"], ["Knock Off"], ["Bug Bite"]] - } - ] - }, - "torterra": { - "flags": {}, - "sets": [ - { - "species": "Torterra", - "item": "Leftovers", - "ability": "Overgrow", - "evs": {"hp": 252, "atk": 128, "def": 128, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Adamant", - "moves": [["Wood Hammer"], ["Earthquake"], ["Stealth Rock"], ["Synthesis"]] - }, - { - "species": "Torterra", - "item": "Soft Sand", - "ability": "Overgrow", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Rock Polish"], ["Wood Hammer"], ["Earthquake"], ["Stone Edge"]] - } - ] - }, - "haunter": { - "flags": {}, - "sets": [ - { - "species": "Haunter", - "item": "Choice Scarf", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Destiny Bond"], ["Trick"]] - }, - { - "species": "Haunter", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Taunt"], ["Destiny Bond", "Will-O-Wisp"]] - }, - { - "species": "Haunter", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Substitute"], ["Pain Split"]] - } - ] - }, - "prinplup": { - "flags": {}, - "sets": [ - { - "species": "Prinplup", - "item": "Eviolite", - "ability": "Torrent", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Defog"], ["Scald"], ["Stealth Rock"], ["Toxic"]] - } - ] - }, - "tangela": { - "flags": {}, - "sets": [ - { - "species": "Tangela", - "item": "Eviolite", - "ability": "Regenerator", - "evs": {"hp": 236, "atk": 0, "def": 48, "spa": 224, "spd": 0, "spe": 0}, - "nature": "Modest", - "moves": [["Leaf Storm"], ["Giga Drain", "Ancient Power"], ["Sleep Powder"], ["Hidden Power Fire"]] - }, - { - "species": "Tangela", - "item": "Eviolite", - "ability": "Regenerator", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0}, - "nature": "Bold", - "moves": [["Giga Drain"], ["Hidden Power Fire"], ["Sleep Powder"], ["Leech Seed"]] - } - ] - }, - "pelipper": { - "flags": {}, - "sets": [ - { - "species": "Pelipper", - "item": "Leftovers", - "ability": "Keen Eye", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0}, - "nature": "Bold", - "moves": [["Defog"], ["Scald"], ["Roost"], ["U-turn", "Hurricane"]] - } - ] - }, - "piloswine": { - "flags": {}, - "sets": [ - { - "species": "Piloswine", - "item": "Eviolite", - "ability": "Thick Fat", - "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Adamant", - "moves": [["Earthquake"], ["Stealth Rock"], ["Icicle Crash"], ["Ice Shard"]] - } - ] - }, - "poliwrath": { - "flags": {}, - "sets": [ - { - "species": "Poliwrath", - "item": "Choice Specs", - "ability": "Water Absorb", - "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160}, - "nature": "Modest", - "moves": [["Hydro Pump"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]] - }, - { - "species": "Poliwrath", - "item": "Leftovers", - "ability": "Water Absorb", - "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160}, - "nature": "Modest", - "moves": [["Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]] - } - ] - }, - "shiftry": { - "flags": {}, - "sets": [ - { - "species": "Shiftry", - "item": "Life Orb", - "ability": "Chlorophyll", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Lonely", - "moves": [["Knock Off"], ["Leaf Storm"], ["Sucker Punch"], ["Explosion"]] - }, - { - "species": "Shiftry", - "item": "Life Orb", - "ability": "Chlorophyll", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Lonely", - "moves": [["Knock Off"], ["Leaf Storm"], ["Sucker Punch"], ["Defog"]] - }, - { - "species": "Shiftry", - "item": "Black Glasses", - "ability": "Chlorophyll", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Knock Off"], ["Seed Bomb"], ["Sucker Punch"]] - } - ] - }, - "charizard": { - "flags": {}, - "sets": [ - { - "species": "Charizard", - "item": "Life Orb", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Fire Blast"], ["Air Slash"], ["Focus Blast"], ["Roost"]] - }, - { - "species": "Charizard", - "item": "Life Orb", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Fire Blast"], ["Air Slash"], ["Hidden Power Grass"], ["Roost"]] - }, - { - "species": "Charizard", - "item": "Life Orb", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Fire Blast"], ["Air Slash"], ["Earthquake"], ["Roost"]] - }, - { - "species": "Charizard", - "ability": "Blaze", - "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Acrobatics"], ["Roost"], ["Will-O-Wisp"]] - } - ] - }, - "floatzel": { - "flags": {}, - "sets": [ - { - "species": "Floatzel", - "item": "Life Orb", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Focus Blast"], ["Taunt"]] - } - ] - }, - "abomasnow": { - "flags": {}, - "sets": [ - { - "species": "Abomasnow", - "item": "Life Orb", - "ability": "Snow Warning", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Blizzard"], ["Giga Drain"], ["Earthquake"], ["Ice Shard"]] - }, - { - "species": "Abomasnow", - "item": "Life Orb", - "ability": "Snow Warning", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Ice Shard"], ["Seed Bomb"], ["Earthquake"]] - } - ] - }, - "hitmonchan": { - "flags": {}, - "sets": [ - { - "species": "Hitmonchan", - "item": "Life Orb", - "ability": "Iron Fist", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Drain Punch", "Close Combat"], ["Mach Punch"], ["Ice Punch", "Stone Edge"], ["Rapid Spin"]] - } - ] - }, - "skuntank": { - "flags": {}, - "sets": [ - { - "species": "Skuntank", - "item": "Lum Berry", - "ability": "Aftermath", - "evs": {"hp": 0, "atk": 232, "def": 0, "spa": 0, "spd": 132, "spe": 144}, - "nature": "Adamant", - "moves": [["Sucker Punch"], ["Pursuit"], ["Poison Jab"], ["Taunt"]] - }, - { - "species": "Skuntank", - "item": "Expert Belt", - "ability": "Aftermath", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Dark Pulse"], ["Fire Blast"], ["Hidden Power Grass"], ["Defog"]] - } - ] - }, - "omastar": { - "flags": {}, - "sets": [ - { - "species": "Omastar", - "item": "White Herb", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Shell Smash"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"]] - }, - { - "species": "Omastar", - "item": "Leftovers", - "ability": "Shell Armor", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Spikes"], ["Stealth Rock"], ["Scald"], ["Icy Wind"]] - }, - { - "species": "Omastar", - "item": "Leftovers", - "ability": "Shell Armor", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Spikes"], ["Stealth Rock"], ["Scald"], ["Hidden Power Electric"]] - }, - { - "species": "Omastar", - "item": "Focus Sash", - "ability": "Weak Armor", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Stealth Rock"], ["Spikes"], ["Scald"], ["Ice Beam"]] - } - ] - }, - "pinsir": { - "flags": {}, - "sets": [ - { - "species": "Pinsir", - "item": "Life Orb", - "ability": "Mold Breaker", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["X-Scissor"], ["Earthquake"], ["Stone Edge"]] - }, - { - "species": "Pinsir", - "item": "Choice Band", - "ability": "Mold Breaker", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["X-Scissor"], ["Earthquake"], ["Stone Edge"], ["Close Combat"]] - }, - { - "species": "Pinsir", - "item": "Focus Sash", - "ability": "Mold Breaker", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Stealth Rock"], ["X-Scissor"], ["Rock Tomb"], ["Earthquake"]] - } - ] - }, - "grumpig": { - "flags": {}, - "sets": [ - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Calm Mind"], ["Psyshock"], ["Focus Blast"], ["Signal Beam"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 160, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic", "Psyshock"], ["Focus Blast"], ["Taunt"], ["Thunder Wave", "Toxic"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Psychic"], ["Heal Bell"], ["Thunder Wave"], ["Whirlwind"]] - } - ] - }, - "sliggoo": { - "flags": {}, - "sets": [ - { - "species": "Sliggoo", - "item": "Eviolite", - "ability": "Sap Sipper", - "evs": {"hp": 252, "atk": 0, "def": 168, "spa": 0, "spd": 88, "spe": 0}, - "nature": "Careful", - "moves": [["Curse"], ["Outrage"], ["Rest"], ["Sleep Talk"]] - }, - { - "species": "Sliggoo", - "item": "Eviolite", - "ability": "Sap Sipper", - "evs": {"hp": 92, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 164}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Sludge Bomb"], ["Muddy Water"], ["Thunderbolt"]] - } - ] - }, - "camerupt": { - "flags": {}, - "sets": [ - { - "species": "Camerupt", - "item": "Leftovers", - "ability": "Solid Rock", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 252, "spe": 0}, - "nature": "Sassy", - "moves": [["Stealth Rock"], ["Lava Plume"], ["Earthquake"], ["Toxic"]] - }, - { - "species": "Camerupt", - "item": "Choice Specs", - "ability": "Solid Rock", - "evs": {"hp": 140, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 116}, - "nature": "Modest", - "moves": [["Fire Blast"], ["Earth Power"], ["Lava Plume"], ["Hidden Power Electric"]] - } - ] - }, - "ninetales": { - "flags": {}, - "sets": [ - { - "species": "Ninetales", - "item": "Life Orb", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Fire Blast"], ["Psyshock"], ["Energy Ball"]] - } - ] - }, - "manectric": { - "flags": {}, - "sets": [ - { - "species": "Manectric", - "item": "Life Orb", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Hidden Power Grass"], ["Overheat"]] - } - ] - }, - "roselia": { - "flags": {}, - "sets": [ - { - "species": "Roselia", - "item": "Eviolite", - "ability": "Natural Cure", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Spikes"], ["Giga Drain"], ["Synthesis"], ["Sludge Bomb"]] - }, - { - "species": "Roselia", - "item": "Eviolite", - "ability": "Natural Cure", - "evs": {"hp": 80, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 176}, - "nature": "Modest", - "moves": [["Spikes"], ["Leaf Storm"], ["Sludge Bomb"], ["Sleep Powder"]] - } - ] - }, - "misdreavus": { - "flags": {}, - "sets": [ - { - "species": "Misdreavus", - "item": "Eviolite", - "ability": "Levitate", - "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16}, - "nature": "Bold", - "moves": [["Hex"], ["Will-O-Wisp"], ["Taunt"], ["Pain Split"]] - } - ] - }, - "clefairy": { - "flags": {}, - "sets": [ - { - "species": "Clefairy", - "item": "Eviolite", - "ability": "Magic Guard", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Moonblast"], ["Soft-Boiled"], ["Thunder Wave"], ["Healing Wish"]] - }, - { - "species": "Clefairy", - "item": "Eviolite", - "ability": "Magic Guard", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Moonblast"], ["Soft-Boiled"], ["Thunder Wave"], ["Stealth Rock"]] - } - ] - } - }, - "PU": { - "prinplup": { - "flags": {}, - "sets": [ - { - "species": "Prinplup", - "item": "Eviolite", - "ability": "Torrent", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Bold", - "moves": [["Stealth Rock"], ["Scald"], ["Toxic"], ["Defog"]] - } - ] - }, - "ampharos": { - "flags": {}, - "sets": [ - { - "species": "Ampharos", - "item": "Life Orb", - "ability": "Static", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Agility"], ["Thunderbolt"], ["Focus Blast"], ["Hidden Power Ice"]] - } - ] - }, - "cryogonal": { - "flags": {}, - "sets": [ - { - "species": "Cryogonal", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Freeze-Dry"], ["Hidden Power Fighting"], ["Recover"], ["Rapid Spin"]] - }, - { - "species": "Cryogonal", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 156, "spa": 0, "spd": 104, "spe": 0}, - "nature": "Calm", - "moves": [["Freeze-Dry"], ["Rapid Spin"], ["Recover"], ["Hidden Power Fighting"]] - } - ] - }, - "glalie": { - "flags": {}, - "sets": [ - { - "species": "Glalie", - "item": "Focus Sash", - "ability": "Inner Focus", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Spikes"], ["Taunt"], ["Ice Beam", "Freeze-Dry"], ["Explosion"]] - } - ] - }, - "camerupt": { - "flags": {}, - "sets": [ - { - "species": "Camerupt", - "item": "Leftovers", - "ability": "Solid Rock", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 252, "spe": 0}, - "nature": "Timid", - "moves": [["Stealth Rock"], ["Lava Plume", "Fire Blast"], ["Earth Power"], ["Roar", "Toxic"]] - } - ] - }, - "altaria": { - "flags": {}, - "sets": [ - { - "species": "Altaria", - "item": "Leftovers", - "ability": "Natural Cure", - "evs": {"hp": 116, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 140}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Dragon Claw"], ["Substitute", "Earthquake"], ["Roost"]] - }, - { - "species": "Altaria", - "item": "Life Orb", - "ability": "Natural Cure", - "evs": {"hp": 116, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 140}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Roost"], ["Fire Blast"], ["Toxic"]] - }, - { - "species": "Altaria", - "item": "Life Orb", - "ability": "Natural Cure", - "evs": {"hp": 116, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 140}, - "nature": "Modest", - "moves": [["Draco Meteor"], ["Roost"], ["Fire Blast"], ["Hidden Power Fighting"]] - } - ] - }, - "audino": { - "flags": {}, - "sets": [ - { - "species": "Audino", - "item": "Leftovers", - "ability": "Regenerator", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Knock Off"], ["Wish"], ["Protect"], ["Encore", "Toxic", "Double-Edge", "Thunder Wave"]] - } - ] - }, - "bouffalant": { - "flags": {}, - "sets": [ - { - "species": "Bouffalant", - "item": "Leftovers", - "ability": "Sap Sipper", - "evs": {"hp": 252, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Adamant", - "moves": [["Substitute"], ["Swords Dance"], ["Return"], ["Earthquake"]], - "happiness": 255 - }, - { - "species": "Bouffalant", - "item": "Assault Vest", - "ability": "Sap Sipper", - "evs": {"hp": 252, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Adamant", - "moves": [["Return"], ["Earthquake"], ["Megahorn"], ["Pursuit", "Head Charge"]], - "happiness": 255 - }, - { - "species": "Bouffalant", - "item": "Choice Band", - "ability": "Sap Sipper", - "evs": {"hp": 252, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Adamant", - "moves": [["Head Charge"], ["Earthquake"], ["Megahorn"], ["Pursuit"]] - } - ] - }, - "gorebyss": { - "flags": {}, - "sets": [ - { - "species": "Gorebyss", - "item": "White Herb", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Shell Smash"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"]] - } - ] - }, - "pawniard": { - "flags": {}, - "sets": [ - { - "species": "Pawniard", - "item": "Eviolite", - "ability": "Defiant", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Knock Off"], ["Iron Head"], ["Sucker Punch"], ["Swords Dance"]] - } - ] - }, - "gothitelle": { - "flags": {}, - "sets": [ - { - "species": "Gothitelle", - "item": "Leftovers", - "ability": "Competitive", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Calm Mind"], ["Mean Look"], ["Rest"], ["Psychic"]] - } - ] - }, - "roselia": { - "flags": {}, - "sets": [ - { - "species": "Roselia", - "item": "Eviolite", - "ability": "Natural Cure", - "evs": {"hp": 252, "atk": 0, "def": 128, "spa": 0, "spd": 128, "spe": 0}, - "nature": "Calm", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Spikes"]] - }, - { - "species": "Roselia", - "item": "Eviolite", - "ability": "Natural Cure", - "evs": {"hp": 252, "atk": 0, "def": 128, "spa": 0, "spd": 128, "spe": 0}, - "nature": "Calm", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Toxic Spikes"]] - }, - { - "species": "Roselia", - "item": "Eviolite", - "ability": "Natural Cure", - "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220}, - "nature": "Modest", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fighting"], ["Sleep Powder"]] - }, - { - "species": "Roselia", - "item": "Eviolite", - "ability": "Natural Cure", - "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220}, - "nature": "Modest", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fighting"], ["Spikes"]] - }, - { - "species": "Roselia", - "item": "Eviolite", - "ability": "Natural Cure", - "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220}, - "nature": "Modest", - "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fighting"], ["Toxic Spikes"]] - } - ] - }, - "floatzel": { - "flags": {}, - "sets": [ - { - "species": "Floatzel", - "item": "Choice Specs", - "ability": "Water Veil", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Surf", "Switcheroo"]] - }, - { - "species": "Floatzel", - "item": "Choice Band", - "ability": "Water Veil", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Waterfall"], ["Ice Punch"], ["Return"], ["Aqua Jet"]], - "happiness": 255 - }, - { - "species": "Floatzel", - "item": "Life Orb", - "ability": "Water Veil", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Ice Punch"], ["Hidden Power Electric"]] - }, - { - "species": "Floatzel", - "item": "Choice Scarf", - "ability": "Water Veil", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Modest", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Surf", "Switcheroo"]] - } - ] - }, - "stoutland": { - "flags": {}, - "sets": [ - { - "species": "Stoutland", - "item": "Choice Band", - "ability": "Scrappy", - "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Return"], ["Superpower"], ["Facade"], ["Pursuit", "Crunch"]], - "happiness": 255 - } - ] - }, - "dodrio": { - "flags": {}, - "sets": [ - { - "species": "Dodrio", - "item": "Choice Band", - "ability": "Early Bird", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Brave Bird"], ["Return"], ["Knock Off"], ["Quick Attack", "Pursuit"]], - "happiness": 255 - }, - { - "species": "Dodrio", - "item": "Choice Scarf", - "ability": "Early Bird", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Brave Bird"], ["Return"], ["Knock Off"], ["Pursuit"]], - "happiness": 255 - } - ] - }, - "zebstrika": { - "flags": {}, - "sets": [ - { - "species": "Zebstrika", - "item": "Life Orb", - "ability": "Sap Sipper", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Thunderbolt"], ["Overheat"], ["Hidden Power Ice"]] - }, - { - "species": "Zebstrika", - "item": "Life Orb", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Volt Switch"], ["Thunderbolt"], ["Overheat"], ["Hidden Power Ice"]] - } - ] - }, - "jumpluff": { - "flags": {}, - "sets": [ - { - "species": "Jumpluff", - "ability": "Infiltrator", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Acrobatics"], ["Sleep Powder"], ["U-turn", "Seed Bomb"], ["Memento"]] - }, - { - "species": "Jumpluff", - "ability": "Infiltrator", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Acrobatics"], ["Sleep Powder"], ["Seed Bomb"], ["Swords Dance"]] - } - ] - }, - "grumpig": { - "flags": {}, - "sets": [ - { - "species": "Grumpig", - "item": "Colbur Berry", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Toxic"]] - }, - { - "species": "Grumpig", - "item": "Colbur Berry", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Shadow Ball"]] - }, - { - "species": "Grumpig", - "item": "Colbur Berry", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Thunder Wave"]] - }, - { - "species": "Grumpig", - "item": "Colbur Berry", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Toxic"]] - }, - { - "species": "Grumpig", - "item": "Colbur Berry", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Shadow Ball"]] - }, - { - "species": "Grumpig", - "item": "Colbur Berry", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Toxic"]] - }, - { - "species": "Grumpig", - "item": "Colbur Berry", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Thunder Wave"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Toxic"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Shadow Ball"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Thunder Wave"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Toxic"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Shadow Ball"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Toxic"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Thunder Wave"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96}, - "nature": "Modest", - "moves": [["Psychic"], ["Focus Blast"], ["Calm Mind"], ["Shadow Ball", "Taunt"]] - }, - { - "species": "Grumpig", - "item": "Leftovers", - "ability": "Thick Fat", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Psychic"], ["Thunder Wave", "Toxic"], ["Focus Blast", "Whirlwind"], ["Protect"]] - } - ] - }, - "stunfisk": { - "flags": {}, - "sets": [ - { - "species": "Stunfisk", - "item": "Leftovers", - "ability": "Static", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Protect"]] - }, - { - "species": "Stunfisk", - "item": "Leftovers", - "ability": "Static", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Hidden Power Bug"]] - }, - { - "species": "Stunfisk", - "item": "Passho Berry", - "ability": "Static", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Toxic"]] - }, - { - "species": "Stunfisk", - "item": "Passho Berry", - "ability": "Static", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Hidden Power Bug"]] - }, - { - "species": "Stunfisk", - "item": "Leftovers", - "ability": "Static", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Bold", - "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Protect"]] - }, - { - "species": "Stunfisk", - "item": "Leftovers", - "ability": "Static", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Bold", - "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Hidden Power Bug"]] - } - ] - }, - "rapidash": { - "flags": {}, - "sets": [ - { - "species": "Rapidash", - "item": "Leftovers", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Flare Blitz"], ["Wild Charge"], ["Will-O-Wisp"], ["Morning Sun"]] - }, - { - "species": "Rapidash", - "item": "Charcoal", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Flare Blitz"], ["Wild Charge"], ["Will-O-Wisp"], ["Morning Sun"]] - } - ] - }, - "tangela": { - "flags": {}, - "sets": [ - { - "species": "Tangela", - "item": "Eviolite", - "ability": "Regenerator", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Bold", - "moves": [["Giga Drain"], ["Synthesis"], ["Hidden Power Fire"], ["Sleep Powder", "Knock Off"]] - }, - { - "species": "Tangela", - "item": "Eviolite", - "ability": "Regenerator", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0}, - "nature": "Modest", - "moves": [["Leaf Storm"], ["Giga Drain"], ["Hidden Power Fire"], ["Sleep Powder"]] - } - ] - }, - "simipour": { - "flags": {}, - "sets": [ - { - "species": "Simipour", - "item": "Life Orb", - "ability": "Torrent", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Grass Knot"], ["Knock Off", "Low Kick", "Nasty Plot"]] - }, - { - "species": "Simipour", - "item": "Life Orb", - "ability": "Torrent", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Knock Off", "Low Kick", "Nasty Plot"]] - }, - { - "species": "Simipour", - "item": "Choice Scarf", - "ability": "Torrent", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Hasty", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Grass Knot"], ["Superpower", "Knock Off"]] - }, - { - "species": "Simipour", - "item": "Salac Berry", - "ability": "Torrent", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Hydro Pump"], ["Ice Beam"], ["Substitute"], ["Nasty Plot"]] - } - ] - }, - "kadabra": { - "flags": {}, - "sets": [ - { - "species": "Kadabra", - "item": "Focus Sash", - "ability": "Magic Guard", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Psychic"], ["Shadow Ball", "Signal Beam"], ["Thunder Wave"], ["Encore"]] - }, - { - "species": "Kadabra", - "item": "Focus Sash", - "ability": "Magic Guard", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Psychic"], ["Hidden Power Fighting"], ["Thunder Wave"], ["Encore"]] - }, - { - "species": "Kadabra", - "item": "Focus Sash", - "ability": "Magic Guard", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Psychic"], ["Shadow Ball"], ["Thunder Wave"], ["Encore"]] - }, - { - "species": "Kadabra", - "item": "Life Orb", - "ability": "Magic Guard", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Psychic"], ["Hidden Power Fighting"], ["Shadow Ball"], ["Substitute", "Encore"]] - } - ] - }, - "raichu": { - "flags": {}, - "sets": [ - { - "species": "Raichu", - "item": "Life Orb", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]] - }, - { - "species": "Raichu", - "item": "Life Orb", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 29, "atk": 0, "def": 30, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Focus Blast"], ["Signal Beam"]] - }, - { - "species": "Raichu", - "item": "Life Orb", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Focus Blast"], ["Hidden Power Ice"]] - }, - { - "species": "Raichu", - "item": "Life Orb", - "ability": "Static", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Signal Beam", "Focus Blast"], ["Surf"]] - }, - { - "species": "Raichu", - "item": "Choice Scarf", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 30, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Signal Beam"], ["Focus Blast"]] - }, - { - "species": "Raichu", - "item": "Choice Scarf", - "ability": "Lightning Rod", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Hidden Power Ice"], ["Focus Blast"]] - } - ] - }, - "regice": { - "flags": {}, - "sets": [ - { - "species": "Regice", - "item": "Life Orb", - "ability": "Clear Body", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Ice Beam"], ["Focus Blast"], ["Thunderbolt"], ["Rock Polish"]] - }, - { - "species": "Regice", - "item": "Leftovers", - "ability": "Clear Body", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Thunder Wave"], ["Ice Beam"], ["Thunderbolt"], ["Focus Blast"]] - } - ] - }, - "relicanth": { - "flags": {}, - "sets": [ - { - "species": "Relicanth", - "item": "Stone Plate", - "ability": "Rock Head", - "evs": {"hp": 104, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 148}, - "nature": "Adamant", - "moves": [["Rock Polish"], ["Head Smash"], ["Waterfall"], ["Earthquake"]] - }, - { - "species": "Relicanth", - "item": "Leftovers", - "ability": "Rock Head", - "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Impish", - "moves": [["Head Smash"], ["Stealth Rock"], ["Earthquake", "Waterfall"], ["Toxic", "Yawn"]] - }, - { - "species": "Relicanth", - "item": "Leftovers", - "ability": "Rock Head", - "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Impish", - "moves": [["Head Smash"], ["Stealth Rock"], ["Earthquake", "Waterfall"], ["Protect"]] - }, - { - "species": "Relicanth", - "item": "Leftovers", - "ability": "Rock Head", - "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Impish", - "moves": [["Head Smash"], ["Stealth Rock"], ["Protect"], ["Toxic", "Yawn"]] - }, - { - "species": "Relicanth", - "item": "Stone Plate", - "ability": "Rock Head", - "evs": {"hp": 168, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 88}, - "nature": "Adamant", - "moves": [["Head Smash"], ["Stealth Rock"], ["Waterfall"], ["Toxic", "Earthquake"]] - }, - { - "species": "Relicanth", - "item": "Leftovers", - "ability": "Rock Head", - "evs": {"hp": 168, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 88}, - "nature": "Adamant", - "moves": [["Head Smash"], ["Stealth Rock"], ["Waterfall"], ["Toxic", "Earthquake"]] - } - ] - }, - "rotomfrost": { - "flags": {}, - "sets": [ - { - "species": "Rotom-Frost", - "item": "Choice Scarf", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Blizzard"], ["Trick", "Will-O-Wisp"]] - }, - { - "species": "Rotom-Frost", - "item": "Choice Scarf", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Blizzard"], ["Hidden Power Ice"]] - }, - { - "species": "Rotom-Frost", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Thunderbolt"], ["Blizzard"], ["Will-O-Wisp", "Volt Switch"]] - }, - { - "species": "Rotom-Frost", - "item": "Life Orb", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Thunderbolt"], ["Blizzard"], ["Pain Split", "Will-O-Wisp"]] - } - ] - }, - "simisage": { - "flags": {}, - "sets": [ - { - "species": "Simisage", - "item": "Life Orb", - "ability": "Overgrow", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Naive", - "moves": [["Leaf Storm"], ["Superpower"], ["Gunk Shot"], ["Knock Off"]] - } - ] - }, - "chatot": { - "flags": {}, - "sets": [ - { - "species": "Chatot", - "item": "Choice Scarf", - "ability": "Keen Eye", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Boomburst"], ["Heat Wave"], ["Hidden Power Fighting"], ["U-turn"]] - }, - { - "species": "Chatot", - "item": "Choice Scarf", - "ability": "Keen Eye", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Timid", - "moves": [["Boomburst"], ["Heat Wave"], ["Hidden Power Fighting"], ["U-turn"]] - }, - { - "species": "Chatot", - "item": "Choice Specs", - "ability": "Keen Eye", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Boomburst"], ["Heat Wave"], ["Hidden Power Fighting"], ["U-turn"]] - } - ] - }, - "mrmime": { - "flags": {}, - "sets": [ - { - "species": "Mr. Mime", - "item": "Choice Scarf", - "ability": "Soundproof", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Psychic"], ["Dazzling Gleam"], ["Focus Blast"], ["Healing Wish"]] - }, - { - "species": "Mr. Mime", - "item": "Choice Specs", - "ability": "Soundproof", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Psychic"], ["Dazzling Gleam"], ["Focus Blast"], ["Shadow Ball"]] - }, - { - "species": "Mr. Mime", - "item": "Life Orb", - "ability": "Soundproof", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Psychic"], ["Dazzling Gleam"], ["Focus Blast"], ["Shadow Ball", "Healing Wish"]] - } - ] - }, - "mightyena": { - "flags": {}, - "sets": [ - { - "species": "Mightyena", - "item": "Life Orb", - "ability": "Moxie", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Adamant", - "moves": [["Crunch"], ["Sucker Punch"], ["Play Rough"], ["Iron Tail"]] - } - ] - }, - "fraxure": { - "flags": {}, - "sets": [ - { - "species": "Fraxure", - "item": "Eviolite", - "ability": "Mold Breaker", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Dragon Dance"], ["Outrage"], ["Low Kick"], ["Dual Chop", "Taunt", "Poison Jab"]] - } - ] - }, - "misdreavus": { - "flags": {}, - "sets": [ - { - "species": "Misdreavus", - "item": "Eviolite", - "ability": "Levitate", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Nasty Plot"], ["Taunt", "Will-O-Wisp"], ["Shadow Ball"], ["Thunderbolt"]] - }, - { - "species": "Misdreavus", - "item": "Eviolite", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 124, "spa": 0, "spd": 0, "spe": 136}, - "nature": "Timid", - "moves": [["Will-O-Wisp"], ["Taunt"], ["Foul Play"], ["Pain Split", "Thunder Wave"]] - } - ] - }, - "probopass": { - "flags": {}, - "sets": [ - { - "species": "Probopass", - "item": "Leftovers", - "ability": "Magnet Pull", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0}, - "nature": "Modest", - "moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Thunder Wave"]] - }, - { - "species": "Probopass", - "item": "Passho Berry", - "ability": "Sturdy", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0}, - "nature": "Modest", - "moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Thunder Wave"]] - }, - { - "species": "Probopass", - "item": "Leftovers", - "ability": "Sturdy", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Calm", - "moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Toxic", "Thunder Wave"]] - } - ] - }, - "sawsbuck": { - "flags": {}, - "sets": [ - { - "species": "Sawsbuck", - "item": "Choice Scarf", - "ability": "Sap Sipper", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Double-Edge"], ["Horn Leech"], ["Jump Kick"], ["Megahorn"]] - }, - { - "species": "Sawsbuck", - "item": "Choice Scarf", - "ability": "Sap Sipper", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Double-Edge"], ["Horn Leech"], ["Jump Kick"], ["Toxic"]] - }, - { - "species": "Sawsbuck", - "item": "Salac Berry", - "ability": "Sap Sipper", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Return"], ["Horn Leech"], ["Substitute"], ["Swords Dance"]], - "happiness": 255 - } - ] - }, - "arbok": { - "flags": {}, - "sets": [ - { - "species": "Arbok", - "item": "Black Sludge", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Coil"], ["Gunk Shot"], ["Sucker Punch"], ["Earthquake"]] - }, - { - "species": "Arbok", - "item": "Shuca Berry", - "ability": "Intimidate", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Coil"], ["Gunk Shot"], ["Sucker Punch"], ["Earthquake"]] - }, - { - "species": "Arbok", - "item": "Black Sludge", - "ability": "Shed Skin", - "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 236, "spe": 20}, - "nature": "Careful", - "moves": [["Coil"], ["Gunk Shot"], ["Rest"], ["Earthquake"]] - } - ] - }, - "duosion": { - "flags": {}, - "sets": [ - { - "species": "Duosion", - "item": "Eviolite", - "ability": "Magic Guard", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0}, - "nature": "Impish", - "moves": [["Calm Mind"], ["Recover"], ["Psyshock", "Psychic"], ["Acid Armor", "Signal Beam"]] - } - ] - }, - "ninetales": { - "flags": {}, - "sets": [ - { - "species": "Ninetales", - "item": "Leftovers", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Nasty Plot"], ["Fire Blast"], ["Energy Ball"]] - }, - { - "species": "Ninetales", - "item": "Passho Berry", - "ability": "Flash Fire", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Fire Blast"], ["Energy Ball"], ["Hidden Power Ground"]] - } - ] - }, - "articuno": { - "flags": {}, - "sets": [ - { - "species": "Articuno", - "item": "Life Orb", - "ability": "Pressure", - "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220}, - "nature": "Modest", - "moves": [["Agility"], ["Ice Beam", "Freeze-Dry"], ["Hurricane"], ["Roost"]] - }, - { - "species": "Articuno", - "item": "Life Orb", - "ability": "Pressure", - "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220}, - "nature": "Modest", - "moves": [["Agility"], ["Ice Beam", "Freeze-Dry"], ["Hurricane"], ["Hidden Power Fighting"]] - }, - { - "species": "Articuno", - "item": "Life Orb", - "ability": "Pressure", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Substitute"], ["Ice Beam", "Freeze-Dry"], ["Hurricane"], ["Roost"]] - } - ] - }, - "clefairy": { - "flags": {}, - "sets": [ - { - "species": "Clefairy", - "item": "Eviolite", - "ability": "Magic Guard", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Calm", - "moves": [["Soft-Boiled"], ["Moonblast"], ["Thunder Wave", "Knock Off", "Healing Wish"], ["Stealth Rock"]] - }, - { - "species": "Clefairy", - "item": "Eviolite", - "ability": "Magic Guard", - "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Bold", - "moves": [["Calm Mind"], ["Soft-Boiled"], ["Moonblast"], ["Thunder Wave", "Knock Off", "Encore"]] - } - ] - }, - "golduck": { - "flags": {}, - "sets": [ - { - "species": "Golduck", - "item": "Life Orb", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Modest", - "moves": [["Hydro Pump"], ["Rain Dance"], ["Ice Beam"], ["Psyshock", "Focus Blast"]] - } - ] - }, - "golem": { - "flags": {}, - "sets": [ - { - "species": "Golem", - "item": "Custap Berry", - "ability": "Sturdy", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Earthquake"], ["Explosion"], ["Stealth Rock"], ["Stone Edge"]] - }, - { - "species": "Golem", - "item": "Weakness Policy", - "ability": "Sturdy", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Adamant", - "moves": [["Earthquake"], ["Sucker Punch"], ["Stealth Rock"], ["Stone Edge"]] - }, - { - "species": "Golem", - "item": "Leftovers", - "ability": "Sturdy", - "evs": {"hp": 248, "atk": 56, "def": 0, "spa": 0, "spd": 204, "spe": 0}, - "nature": "Adamant", - "moves": [["Stealth Rock"], ["Stone Edge"], ["Earthquake"], ["Protect"]] - } - ] - }, - "gourgeistsuper": { - "flags": {}, - "sets": [ - { - "species": "Gourgeist-Super", - "item": "Leftovers", - "ability": "Frisk", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Foul Play"], ["Will-O-Wisp"], ["Synthesis"], ["Seed Bomb"]] - } - ] - }, - "lickilicky": { - "flags": {}, - "sets": [ - { - "species": "Lickilicky", - "item": "Leftovers", - "ability": "Oblivious", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Wish"], ["Protect"], ["Body Slam", "Knock Off"], ["Dragon Tail", "Heal Bell"]] - } - ] - }, - "monferno": { - "flags": {}, - "sets": [ - { - "species": "Monferno", - "item": "Eviolite", - "ability": "Iron Fist", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Mach Punch"], ["Flare Blitz"], ["Close Combat"]] - }, - { - "species": "Monferno", - "item": "Life Orb", - "ability": "Iron Fist", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Swords Dance"], ["Mach Punch"], ["Flare Blitz"], ["Close Combat"]] - }, - { - "species": "Monferno", - "item": "Eviolite", - "ability": "Iron Fist", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["U-turn", "Thunder Punch"], ["Mach Punch"], ["Flare Blitz"], ["Close Combat"]] - }, - { - "species": "Monferno", - "item": "Eviolite", - "ability": "Iron Fist", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["U-turn", "Thunder Punch"], ["Mach Punch"], ["Flare Blitz"], ["Stealth Rock"]] - } - ] - }, - "politoed": { - "flags": {}, - "sets": [ - { - "species": "Politoed", - "item": "Leftovers", - "ability": "Water Absorb", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0}, - "nature": "Modest", - "moves": [["Scald"], ["Ice Beam"], ["Hidden Power Electric"], ["Encore", "Toxic"]] - }, - { - "species": "Politoed", - "item": "Leftovers", - "ability": "Water Absorb", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Calm", - "moves": [["Perish Song"], ["Scald"], ["Toxic"], ["Protect"]] - } - ] - }, - "seaking": { - "flags": {}, - "sets": [ - { - "species": "Seaking", - "item": "Leftovers", - "ability": "Lightning Rod", - "evs": {"hp": 104, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 152}, - "nature": "Adamant", - "moves": [["Waterfall"], ["Knock Off"], ["Megahorn"], ["Haze", "Protect"]] - } - ] - }, - "simisear": { - "flags": {}, - "sets": [ - { - "species": "Simisear", - "item": "Life Orb", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Naive", - "moves": [["Knock Off"], ["Rock Slide"], ["Superpower", "Low Kick"], ["Overheat", "Fire Blast"]] - }, - { - "species": "Simisear", - "item": "Life Orb", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Naive", - "moves": [["Fire Blast"], ["Grass Knot"], ["Low Kick"], ["Knock Off"]] - }, - { - "species": "Simisear", - "item": "Life Orb", - "ability": "Blaze", - "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252}, - "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Nasty Plot"], ["Focus Blast"], ["Grass Knot"], ["Fire Blast"]] - }, - { - "species": "Simisear", - "item": "Salac Berry", - "ability": "Blaze", - "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Substitute"], ["Nasty Plot"], ["Focus Blast"], ["Fire Blast"]] - } - ] - }, - "swanna": { - "flags": {}, - "sets": [ - { - "species": "Swanna", - "item": "Life Orb", - "ability": "Keen Eye", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31}, - "nature": "Timid", - "moves": [["Defog"], ["Roost"], ["Scald"], ["Hurricane"]] - } - ] - }, - "vullaby": { - "flags": {}, - "sets": [ - { - "species": "Vullaby", - "item": "Eviolite", - "ability": "Overcoat", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Defog"], ["Roost"], ["U-turn", "Whirlwind"], ["Foul Play"]] - }, - { - "species": "Vullaby", - "item": "Eviolite", - "ability": "Overcoat", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Defog"], ["Roost"], ["U-turn", "Whirlwind"], ["Foul Play"]] - } - ] - }, - "basculin": { - "flags": {}, - "sets": [ - { - "species": "Basculin", - "item": "Choice Band", - "ability": "Adaptability", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Waterfall", "Aqua Tail"], ["Aqua Jet"], ["Crunch", "Zen Headbutt"], ["Double-Edge"]] - }, - { - "species": "Basculin", - "item": "Life Orb", - "ability": "Adaptability", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 30, "spd": 31, "spe": 31}, - "nature": "Naive", - "moves": [["Waterfall"], ["Aqua Jet"], ["Ice Beam"], ["Superpower"]] - }, - { - "species": "Basculin", - "item": "Life Orb", - "ability": "Adaptability", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Waterfall"], ["Aqua Jet"], ["Ice Beam"], ["Hidden Power Electric"]] - } - ] - }, - "gabite": { - "flags": {}, - "sets": [ - { - "species": "Gabite", - "item": "Eviolite", - "ability": "Rough Skin", - "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Toxic", "Roar"], ["Dragon Claw"], ["Earthquake"]] - }, - { - "species": "Gabite", - "item": "Eviolite", - "ability": "Rough Skin", - "evs": {"hp": 248, "atk": 220, "def": 0, "spa": 0, "spd": 0, "spe": 40}, - "nature": "Adamant", - "moves": [["Stealth Rock"], ["Toxic", "Roar"], ["Dragon Claw"], ["Earthquake"]] - }, - { - "species": "Gabite", - "item": "Eviolite", - "ability": "Rough Skin", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Earthquake"], ["Outrage"], ["Stealth Rock"], ["Stone Edge", "Toxic", "Roar"]] - } - ] - }, - "gourgeistsmall": { - "flags": {}, - "sets": [ - { - "species": "Gourgeist-Small", - "item": "Leftovers", - "ability": "Frisk", - "evs": {"hp": 152, "atk": 0, "def": 104, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Leech Seed"], ["Substitute"], ["Foul Play", "Seed Bomb"], ["Will-O-Wisp", "Disable"]] - }, - { - "species": "Gourgeist-Small", - "item": "Choice Scarf", - "ability": "Frisk", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Seed Bomb"], ["Trick"], ["Rock Slide"], ["Explosion", "Destiny Bond"]] - } - ] - }, - "klang": { - "flags": {}, - "sets": [ - { - "species": "Klang", - "item": "Eviolite", - "ability": "Clear Body", - "evs": {"hp": 252, "atk": 0, "def": 156, "spa": 0, "spd": 100, "spe": 0}, - "nature": "Careful", - "moves": [["Rest"], ["Sleep Talk"], ["Shift Gear"], ["Gear Grind"]] - } - ] - }, - "leafeon": { - "flags": {}, - "sets": [ - { - "species": "Leafeon", - "item": "Choice Band", - "ability": "Leaf Guard", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Leaf Blade"], ["Bullet Seed"], ["Knock Off"], ["Double-Edge", "Quick Attack"]] - }, - { - "species": "Leafeon", - "item": "Yache Berry", - "ability": "Chlorophyll", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Leaf Blade"], ["Knock Off"], ["Synthesis", "Return"]] - }, - { - "species": "Leafeon", - "item": "Occa Berry", - "ability": "Chlorophyll", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Swords Dance"], ["Leaf Blade"], ["Knock Off"], ["Synthesis", "Return"]] - }, - { - "species": "Leafeon", - "item": "Choice Scarf", - "ability": "Chlorophyll", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Double-Edge", "Return"], ["Leaf Blade"], ["Knock Off"], ["Bullet Seed", "X-Scissor"]] - } - ] - }, - "leavanny": { - "flags": {}, - "sets": [ - { - "species": "Leavanny", - "item": "Focus Sash", - "ability": "Chlorophyll", - "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Leaf Storm"], ["Electroweb", "Magic Coat"], ["Sticky Web"], ["Knock Off"]] - } - ] - }, - "metang": { - "flags": {}, - "sets": [ - { - "species": "Metang", - "item": "Eviolite", - "ability": "Clear Body", - "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 8}, - "nature": "Adamant", - "moves": [["Meteor Mash"], ["Stealth Rock"], ["Pursuit", "Bullet Punch"], ["Earthquake", "Zen Headbutt"]] - }, - { - "species": "Metang", - "item": "Eviolite", - "ability": "Clear Body", - "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 252, "spe": 8}, - "nature": "Careful", - "moves": [["Meteor Mash"], ["Stealth Rock"], ["Toxic"], ["Pursuit", "Bullet Punch", "Earthquake", "Zen Headbutt"]] - }, - { - "species": "Metang", - "item": "Eviolite", - "ability": "Clear Body", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8}, - "nature": "Impish", - "moves": [["Meteor Mash"], ["Stealth Rock"], ["Toxic"], ["Earthquake", "Zen Headbutt", "Pursuit", "Bullet Punch"]] - } - ] - }, - "ninjask": { - "flags": {}, - "sets": [ - { - "species": "Ninjask", - "item": "Choice Band", - "ability": "Infiltrator", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["U-turn"], ["X-Scissor"], ["Aerial Ace"], ["Toxic"]] - } - ] - }, - "purugly": { - "flags": {}, - "sets": [ - { - "species": "Purugly", - "item": "Life Orb", - "ability": "Defiant", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Return"], ["Fake Out"], ["Knock Off"], ["U-turn", "Sucker Punch", "Wake-Up Slap"]], - "happiness": 255 - } - ] - }, - "solrock": { - "flags": {}, - "sets": [ - { - "species": "Solrock", - "item": "Leftovers", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Will-O-Wisp"], ["Zen Headbutt", "Stone Edge"], ["Morning Sun"]] - }, - { - "species": "Solrock", - "item": "Colbur Berry", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Stealth Rock"], ["Will-O-Wisp"], ["Stone Edge"], ["Morning Sun"]] - } - ] - }, - "venipede": { - "flags": {}, - "sets": [ - { - "species": "Venipede", - "item": "Focus Sash", - "ability": "Speed Boost", - "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Timid", - "moves": [["Protect"], ["Spikes"], ["Toxic Spikes"], ["Endeavor"]] - } - ] - }, - "armaldo": { - "flags": {}, - "sets": [ - { - "species": "Armaldo", - "item": "Leftovers", - "ability": "Battle Armor", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Rapid Spin"], ["Knock Off"], ["Stone Edge"], ["Toxic"]] - }, - { - "species": "Armaldo", - "item": "Leftovers", - "ability": "Battle Armor", - "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0}, - "nature": "Impish", - "moves": [["Rapid Spin"], ["Knock Off"], ["Stone Edge"], ["Stealth Rock"]] - }, - { - "species": "Armaldo", - "item": "Leftovers", - "ability": "Battle Armor", - "evs": {"hp": 248, "atk": 252, "def": 8, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Adamant", - "moves": [["Stone Edge"], ["Knock Off"], ["Rapid Spin"], ["Earthquake"]] - } - ] - }, - "dusknoir": { - "flags": {}, - "sets": [ - { - "species": "Dusknoir", - "item": "Choice Band", - "ability": "Frisk", - "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Adamant", - "moves": [["Shadow Sneak"], ["Thunder Punch"], ["Earthquake"], ["Trick"]] - }, - { - "species": "Dusknoir", - "item": "Spell Tag", - "ability": "Frisk", - "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Adamant", - "moves": [["Shadow Sneak"], ["Thunder Punch"], ["Earthquake"], ["Will-O-Wisp"]] - } - ] - }, - "huntail": { - "flags": {}, - "sets": [ - { - "species": "Huntail", - "item": "White Herb", - "ability": "Water Veil", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naughty", - "moves": [["Shell Smash"], ["Sucker Punch"], ["Waterfall"], ["Ice Beam"]] - }, - { - "species": "Huntail", - "item": "White Herb", - "ability": "Swift Swim", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Shell Smash"], ["Sucker Punch"], ["Waterfall"], ["Double-Edge"]] - } - ] - }, - "murkrow": { - "flags": {}, - "sets": [ - { - "species": "Murkrow", - "item": "Life Orb", - "ability": "Prankster", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Jolly", - "moves": [["Brave Bird"], ["Sucker Punch"], ["Pursuit"], ["Thunder Wave"]] - }, - { - "species": "Murkrow", - "item": "Life Orb", - "ability": "Prankster", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Brave Bird"], ["Sucker Punch"], ["Hidden Power Fighting"], ["Thunder Wave", "Pursuit"]] - } - ] - }, - "vibrava": { - "flags": {}, - "sets": [ - { - "species": "Vibrava", - "item": "Eviolite", - "ability": "Levitate", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Earthquake"], ["U-turn", "Toxic"], ["Defog"], ["Roost"]] - } - ] - }, - "zweilous": { - "flags": {}, - "sets": [ - { - "species": "Zweilous", - "item": "Eviolite", - "ability": "Hustle", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Rest"], ["Sleep Talk"], ["Crunch"], ["Dragon Tail", "Roar"]] - }, - { - "species": "Zweilous", - "item": "Choice Band", - "ability": "Hustle", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Crunch"], ["Outrage"], ["Superpower"], ["Sleep Talk"]] - } - ] - }, - "avalugg": { - "flags": {}, - "sets": [ - { - "species": "Avalugg", - "item": "Leftovers", - "ability": "Sturdy", - "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0}, - "nature": "Careful", - "moves": [["Recover"], ["Rapid Spin"], ["Avalanche"], ["Roar", "Toxic"]] - } - ] - }, - "electrode": { - "flags": {}, - "sets": [ - { - "species": "Electrode", - "item": "Life Orb", - "ability": "Soundproof", - "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252}, - "nature": "Modest", - "moves": [["Thunderbolt"], ["Volt Switch"], ["Signal Beam"], ["Hidden Power Ice"]] - } - ] - }, - "marowak": { - "flags": {}, - "sets": [ - { - "species": "Marowak", - "item": "Thick Club", - "ability": "Rock Head", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Bonemerang"], ["Knock Off"], ["Double-Edge"], ["Stealth Rock"]] - }, - { - "species": "Marowak", - "item": "Thick Club", - "ability": "Rock Head", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Bonemerang"], ["Knock Off"], ["Double-Edge"], ["Stone Edge"]] - }, - { - "species": "Marowak", - "item": "Thick Club", - "ability": "Rock Head", - "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252}, - "nature": "Adamant", - "moves": [["Bonemerang"], ["Knock Off"], ["Stone Edge"], ["Stealth Rock"]] - } - ] - }, - "quilladin": { - "flags": {}, - "sets": [ - { - "species": "Quilladin", - "item": "Eviolite", - "ability": "Bulletproof", - "evs": {"hp": 252, "atk": 4, "def": 252, "spa": 0, "spd": 0, "spe": 0}, - "nature": "Impish", - "moves": [["Wood Hammer"], ["Spikes"], ["Synthesis"], ["Roar"]] - }, - { - "species": "Quilladin", - "item": "Eviolite", - "ability": "Bulletproof", - "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252}, - "nature": "Jolly", - "moves": [["Wood Hammer"], ["Taunt"], ["Spikes"], ["Zen Headbutt", "Drain Punch"]] - } - ] - }, - "rampardos": { - "flags": {}, - "sets": [ - { - "species": "Rampardos", - "item": "Focus Sash", - "ability": "Mold Breaker", - "evs": {"hp": 0, "atk": 144, "def": 0, "spa": 112, "spd": 0, "spe": 252}, - "nature": "Naive", - "moves": [["Stealth Rock"], ["Superpower"], ["Head Smash"], ["Surf"]] - } - ] - }, - "drifblim": { - "flags": {}, - "sets": [ - { - "species": "Drifblim", - "item": "Liechi Berry", - "ability": "Unburden", - "evs": {"hp": 12, "atk": 244, "def": 0, "spa": 0, "spd": 40, "spe": 212}, - "nature": "Adamant", - "moves": [["Substitute"], ["Acrobatics"], ["Knock Off"], ["Will-O-Wisp"]] - } - ] - } - } -} diff --git a/data/random-battles/gen6megasrevisited/sets.json b/data/random-battles/gen6megasrevisited/sets.json deleted file mode 100644 index 10fb1f136a..0000000000 --- a/data/random-battles/gen6megasrevisited/sets.json +++ /dev/null @@ -1,6301 +0,0 @@ -{ - "venusaur": { - "level": 83, - "sets": [ - { - "role": "Staller", - "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"], - "abilities": ["Chlorophyll", "Overgrow"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "gigadrain", "sleeppowder", "sludgebomb", "synthesis"], - "abilities": ["Chlorophyll", "Overgrow"] - } - ] - }, - "venusaurmega": { - "level": 77, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["hiddenpowerground", "leafstorm", "sludgebomb", "synthesis"], - "abilities": ["Chlorophyll"] - }, - { - "role": "Bulky Support", - "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"], - "abilities": ["Chlorophyll"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "gigadrain", "leechseed", "sludgebomb"], - "abilities": ["Chlorophyll"] - } - ] - }, - "charizard": { - "level": 83, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["hurricane", "earthquake", "fireblast", "roost", "willowisp"], - "abilities": ["Blaze", "Solar Power"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "hurricane", "fireblast", "roost"], - "abilities": ["Blaze", "Solar Power"] - }, - { - "role": "Setup Sweeper", - "movepool": ["acrobatics", "earthquake", "flareblitz", "swordsdance"], - "abilities": ["Blaze"] - } - ] - }, - "charizardmegax": { - "level": 74, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["dragonclaw", "dragondance", "earthquake", "flareblitz", "roost"], - "abilities": ["Blaze"] - } - ] - }, - "charizardmegay": { - "level": 74, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["hurricane", "fireblast", "roost", "focusblast"], - "abilities": ["Blaze"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "hurricane", "lavaplume", "roost"], - "abilities": ["Blaze"] - } - ] - }, - "blastoise": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"], - "abilities": ["Torrent"] - }, - { - "role": "Staller", - "movepool": ["haze", "icebeam", "protect", "rapidspin", "scald", "toxic"], - "abilities": ["Torrent"] - } - ] - }, - "blastoisemega": { - "level": 81, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["moonblast", "rapidspin", "scald", "taunt"], - "abilities": ["Rain Dish"] - }, - { - "role": "Bulky Attacker", - "movepool": ["moonblast", "rapidspin", "hydropump", "hiddenpowerfire"], - "abilities": ["Rain Dish"] - } - ] - }, - "butterfree": { - "level": 92, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["bugbuzz", "psychic", "quiverdance", "sleeppowder"], - "abilities": ["Tinted Lens"] - } - ] - }, - "beedrill": { - "level": 94, - "sets": [ - { - "role": "Fast Support", - "movepool": ["defog", "knockoff", "poisonjab", "toxicspikes", "uturn", "stealthrock"], - "abilities": ["Swarm"] - }, - { - "role": "Setup Sweeper", - "movepool": ["poisonjab", "earthquake", "diamondstorm", "swordsdance"], - "abilities": ["Swarm"] - } - ] - }, - "beedrillmega": { - "level": 80, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["diamondstorm", "earthquake", "roost", "uturn"], - "abilities": ["Swarm"] - }, - { - "role": "Bulky Support", - "movepool": ["diamondstorm", "earthquake", "roost", "uturn", "defog", "stealthrock"], - "abilities": ["Swarm"] - }, - { - "role": "Bulky Setup", - "movepool": ["diamondstorm", "earthquake", "roost", "swordsdance"], - "abilities": ["Swarm"] - } - ] - }, - "pidgeot": { - "level": 88, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "heatwave", "return", "roost", "uturn"], - "abilities": ["Big Pecks"] - }, - { - "role": "Fast Attacker", - "movepool": ["bravebird", "focusblast", "return", "workup"], - "abilities": ["Keen Eye"] - } - ] - }, - "pidgeotmega": { - "level": 77, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["defog", "focusblast", "hurricane", "roost", "uturn", "workup"], - "abilities": ["Big Pecks"] - } - ] - }, - "raticate": { - "level": 88, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["crunch", "facade", "flamewheel", "protect", "suckerpunch", "swordsdance", "uturn"], - "abilities": ["Guts"], - "preferredTypes": ["Dark"] - } - ] - }, - "fearow": { - "level": 88, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"], - "abilities": ["Sniper"] - } - ] - }, - "arbok": { - "level": 90, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "suckerpunch"], - "abilities": ["Intimidate"], - "preferredTypes": ["Ground"] - }, - { - "role": "Bulky Setup", - "movepool": ["coil", "earthquake", "gunkshot", "rest"], - "abilities": ["Shed Skin"] - } - ] - }, - "pikachu": { - "level": 91, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "knockoff", "surf", "voltswitch", "volttackle"], - "abilities": ["Lightning Rod"] - } - ] - }, - "raichu": { - "level": 87, - "sets": [ - { - "role": "Fast Support", - "movepool": ["encore", "hiddenpowerice", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch"], - "abilities": ["Lightning Rod"], - "preferredTypes": ["Ice"] - }, - { - "role": "Fast Attacker", - "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"], - "abilities": ["Lightning Rod"] - } - ] - }, - "sandslash": { - "level": 89, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"], - "abilities": ["Sand Rush"] - } - ] - }, - "nidoqueen": { - "level": 81, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "stealthrock", "toxicspikes"], - "abilities": ["Sheer Force"], - "preferredTypes": ["Ice"] - } - ] - }, - "nidoking": { - "level": 82, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "substitute"], - "abilities": ["Sheer Force"], - "preferredTypes": ["Ice"] - } - ] - }, - "clefable": { - "level": 80, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"], - "abilities": ["Magic Guard", "Unaware"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"], - "abilities": ["Magic Guard", "Unaware"] - } - ] - }, - "ninetales": { - "level": 83, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["fireblast", "hiddenpowerrock", "nastyplot", "solarbeam"], - "abilities": ["Drought"] - }, - { - "role": "Bulky Setup", - "movepool": ["fireblast", "nastyplot", "solarbeam", "substitute", "willowisp"], - "abilities": ["Drought"], - "preferredTypes": ["Grass"] - } - ] - }, - "wigglytuff": { - "level": 93, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["dazzlinggleam", "fireblast", "healbell", "knockoff", "protect", "stealthrock", "thunderwave", "wish"], - "abilities": ["Competitive"] - } - ] - }, - "vileplume": { - "level": 87, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["aromatherapy", "gigadrain", "hiddenpowerground", "sleeppowder", "sludgebomb", "synthesis"], - "abilities": ["Effect Spore"] - } - ] - }, - "parasect": { - "level": 100, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["aromatherapy", "knockoff", "seedbomb", "spore", "stunspore", "xscissor"], - "abilities": ["Dry Skin"], - "preferredTypes": ["Bug"] - } - ] - }, - "venomoth": { - "level": 84, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb"], - "abilities": ["Tinted Lens"] - } - ] - }, - "dugtrio": { - "level": 86, - "sets": [ - { - "role": "Fast Support", - "movepool": ["earthquake", "honeclaws", "stealthrock", "stoneedge", "suckerpunch"], - "abilities": ["Arena Trap"] - }, - { - "role": "Wallbreaker", - "movepool": ["doubleedge", "earthquake", "stoneedge", "suckerpunch"], - "abilities": ["Arena Trap"] - } - ] - }, - "persian": { - "level": 91, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["doubleedge", "knockoff", "return", "seedbomb", "uturn"], - "abilities": ["Limber"] - }, - { - "role": "Wallbreaker", - "movepool": ["doubleedge", "fakeout", "knockoff", "return", "uturn"], - "abilities": ["Technician"] - }, - { - "role": "Setup Sweeper", - "movepool": ["hiddenpowerfighting", "hypervoice", "nastyplot", "shadowball"], - "abilities": ["Technician"] - } - ] - }, - "golduck": { - "level": 90, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "encore", "focusblast", "icebeam", "scald", "substitute"], - "abilities": ["Cloud Nine", "Swift Swim"], - "preferredTypes": ["Ice"] - }, - { - "role": "Fast Attacker", - "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam"], - "abilities": ["Cloud Nine", "Swift Swim"], - "preferredTypes": ["Ice"] - } - ] - }, - "primeape": { - "level": 87, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "stoneedge", "uturn"], - "abilities": ["Defiant"] - } - ] - }, - "arcanine": { - "level": 82, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"], - "abilities": ["Intimidate"] - }, - { - "role": "Fast Attacker", - "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "wildcharge"], - "abilities": ["Intimidate"], - "preferredTypes": ["Fighting"] - } - ] - }, - "poliwrath": { - "level": 89, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["focusblast", "icepunch", "raindance", "waterfall"], - "abilities": ["Swift Swim"] - }, - { - "role": "Bulky Attacker", - "movepool": ["circlethrow", "rest", "scald", "sleeptalk"], - "abilities": ["Water Absorb"] - } - ] - }, - "alakazam": { - "level": 81, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["counter", "focusblast", "psychic", "psyshock", "shadowball"], - "abilities": ["Magic Guard"] - }, - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "encore", "focusblast", "psychic", "psyshock", "shadowball", "substitute"], - "abilities": ["Magic Guard"], - "preferredTypes": ["Fighting"] - } - ] - }, - "alakazammega": { - "level": 78, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "icebeam"], - "abilities": ["Magic Guard"] - }, - { - "role": "Fast Attacker", - "movepool": ["substitute", "focusblast", "psychic", "psyshock", "icebeam"], - "abilities": ["Magic Guard"] - } - ] - }, - "machamp": { - "level": 81, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "knockoff", "stoneedge"], - "abilities": ["No Guard"], - "preferredTypes": ["Dark"] - }, - { - "role": "AV Pivot", - "movepool": ["bulletpunch", "dynamicpunch", "knockoff", "stoneedge"], - "abilities": ["No Guard"] - } - ] - }, - "victreebel": { - "level": 90, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["hiddenpowerground", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "suckerpunch"], - "abilities": ["Chlorophyll"] - }, - { - "role": "Setup Sweeper", - "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"], - "abilities": ["Chlorophyll"] - } - ] - }, - "tentacruel": { - "level": 83, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"], - "abilities": ["Clear Body", "Liquid Ooze"] - } - ] - }, - "golem": { - "level": 86, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"], - "abilities": ["Sturdy"] - }, - { - "role": "Bulky Setup", - "movepool": ["earthquake", "explosion", "rockpolish", "stoneedge", "suckerpunch"], - "abilities": ["Sturdy"] - } - ] - }, - "rapidash": { - "level": 87, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["drillrun", "flareblitz", "morningsun", "wildcharge", "willowisp"], - "abilities": ["Flame Body", "Flash Fire"] - }, - { - "role": "Wallbreaker", - "movepool": ["drillrun", "flareblitz", "megahorn", "morningsun", "wildcharge"], - "abilities": ["Flash Fire"] - } - ] - }, - "slowbro": { - "level": 82, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"], - "abilities": ["Regenerator"] - }, - { - "role": "AV Pivot", - "movepool": ["fireblast", "futuresight", "icebeam", "psyshock", "scald"], - "abilities": ["Regenerator"] - } - ] - }, - "slowbromega": { - "level": 81, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["futuresight", "fireblast", "scald", "slackoff"], - "abilities": ["Regenerator"] - } - ] - }, - "farfetchd": { - "level": 100, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["bravebird", "knockoff", "leafblade", "return", "swordsdance"], - "abilities": ["Defiant"] - } - ] - }, - "dodrio": { - "level": 86, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["bravebird", "doubleedge", "knockoff", "quickattack", "return"], - "abilities": ["Early Bird"] - }, - { - "role": "Fast Attacker", - "movepool": ["bravebird", "knockoff", "return", "roost"], - "abilities": ["Early Bird"] - } - ] - }, - "dewgong": { - "level": 94, - "sets": [ - { - "role": "Staller", - "movepool": ["icebeam", "protect", "surf", "toxic"], - "abilities": ["Thick Fat"] - }, - { - "role": "Bulky Support", - "movepool": ["encore", "icebeam", "surf", "toxic"], - "abilities": ["Thick Fat"] - } - ] - }, - "muk": { - "level": 88, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["brickbreak", "curse", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"], - "abilities": ["Poison Touch"], - "preferredTypes": ["Fighting"] - } - ] - }, - "cloyster": { - "level": 78, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"], - "abilities": ["Skill Link"] - } - ] - }, - "gengar": { - "level": 78, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["focusblast", "shadowball", "sludgewave", "substitute", "trick", "willowisp"], - "abilities": ["Levitate"] - }, - { - "role": "Setup Sweeper", - "movepool": ["focusblast", "shadowball", "sludgewave", "calmmind"], - "abilities": ["Levitate"] - } - ] - }, - "gengarmega": { - "level": 78, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["focusblast", "shadowball", "sludgewave", "calmmind"], - "abilities": ["Levitate"] - }, - { - "role": "Fast Attacker", - "movepool": ["focusblast", "hex", "sludgebomb", "willowisp"], - "abilities": ["Levitate"] - } - ] - }, - "hypno": { - "level": 96, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"], - "abilities": ["Insomnia"] - }, - { - "role": "Staller", - "movepool": ["protect", "seismictoss", "toxic", "wish"], - "abilities": ["Insomnia"] - } - ] - }, - "kingler": { - "level": 89, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["agility", "crabhammer", "knockoff", "rockslide", "superpower", "swordsdance", "xscissor"], - "abilities": ["Hyper Cutter", "Sheer Force"] - } - ] - }, - "electrode": { - "level": 88, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["foulplay", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"], - "abilities": ["Aftermath", "Static"], - "preferredTypes": ["Ice"] - }, - { - "role": "Fast Support", - "movepool": ["hiddenpowerice", "thunderbolt", "thunderwave", "toxic", "voltswitch"], - "abilities": ["Aftermath", "Static"] - } - ] - }, - "exeggutor": { - "level": 92, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "substitute"], - "abilities": ["Harvest"], - "preferredTypes": ["Psychic"] - } - ] - }, - "marowak": { - "level": 88, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["doubleedge", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance"], - "abilities": ["Battle Armor", "Rock Head"], - "preferredTypes": ["Rock"] - } - ] - }, - "hitmonlee": { - "level": 86, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["highjumpkick", "knockoff", "machpunch", "poisonjab", "rapidspin", "stoneedge"], - "abilities": ["Reckless"], - "preferredTypes": ["Dark"] - }, - { - "role": "Setup Sweeper", - "movepool": ["bulkup", "closecombat", "knockoff", "poisonjab", "stoneedge"], - "abilities": ["Unburden"], - "preferredTypes": ["Dark"] - } - ] - }, - "hitmonchan": { - "level": 86, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"], - "abilities": ["Iron Fist"] - } - ] - }, - "weezing": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"], - "abilities": ["Levitate"] - } - ] - }, - "rhydon": { - "level": 83, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"], - "abilities": ["Lightning Rod"] - } - ] - }, - "chansey": { - "level": 86, - "sets": [ - { - "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"], - "abilities": ["Natural Cure"] - } - ] - }, - "kangaskhan": { - "level": 85, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"], - "abilities": ["Scrappy"] - }, - { - "role": "AV Pivot", - "movepool": ["drainpunch", "earthquake", "fakeout", "return", "suckerpunch"], - "abilities": ["Scrappy"] - } - ] - }, - "kangaskhanmega": { - "level": 77, - "sets": [ - { - "role": "Fast Support", - "movepool": ["bodyslam", "milkdrink", "earthquake", "suckerpunch"], - "abilities": ["Scrappy"] - }, - { - "role": "Setup Sweeper", - "movepool": ["return", "earthquake", "poweruppunch", "suckerpunch"], - "abilities": ["Scrappy"] - } - ] - }, - "seaking": { - "level": 93, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "waterfall"], - "abilities": ["Lightning Rod"], - "preferredTypes": ["Dark"] - }, - { - "role": "Setup Sweeper", - "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "raindance", "waterfall"], - "abilities": ["Swift Swim"], - "preferredTypes": ["Dark"] - } - ] - }, - "starmie": { - "level": 82, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"], - "abilities": ["Analytic", "Natural Cure"] - }, - { - "role": "Bulky Support", - "movepool": ["psyshock", "rapidspin", "recover", "scald", "thunderwave", "toxic"], - "abilities": ["Natural Cure"] - } - ] - }, - "mrmime": { - "level": 89, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "psychic", "psyshock", "shadowball", "thunderbolt"], - "abilities": ["Filter"], - "preferredTypes": ["Fighting"] - }, - { - "role": "Setup Sweeper", - "movepool": ["dazzlinggleam", "encore", "focusblast", "nastyplot", "psychic", "psyshock"], - "abilities": ["Filter"] - } - ] - }, - "scyther": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"], - "abilities": ["Technician"] - }, - { - "role": "Setup Sweeper", - "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"], - "abilities": ["Technician"] - } - ] - }, - "jynx": { - "level": 86, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"], - "abilities": ["Dry Skin"] - }, - { - "role": "Setup Sweeper", - "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"], - "abilities": ["Dry Skin"] - } - ] - }, - "pinsir": { - "level": 85, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "xscissor"], - "abilities": ["Moxie"], - "preferredTypes": ["Ground"] - } - ] - }, - "pinsirmega": { - "level": 73, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["closecombat", "iceshard", "iciclecrash", "swordsdance"], - "abilities": ["Hyper Cutter"] - }, - { - "role": "Fast Attacker", - "movepool": ["closecombat", "iceshard", "iciclecrash", "uturn"], - "abilities": ["Hyper Cutter"] - } - ] - }, - "tauros": { - "level": 82, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["bodyslam", "earthquake", "fireblast", "rockslide", "zenheadbutt"], - "abilities": ["Sheer Force"], - "preferredTypes": ["Ground"] - }, - { - "role": "Fast Attacker", - "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"], - "abilities": ["Intimidate"] - } - ] - }, - "gyarados": { - "level": 78, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"], - "abilities": ["Intimidate", "Moxie"] - } - ] - }, - "gyaradosmega": { - "level": 74, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["doubleedge", "dragondance", "earthquake", "substitute", "waterfall"], - "abilities": ["Intimidate"] - } - ] - }, - "lapras": { - "level": 87, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["freezedry", "healbell", "hydropump", "icebeam", "toxic"], - "abilities": ["Water Absorb"] - }, - { - "role": "Staller", - "movepool": ["freezedry", "hydropump", "protect", "toxic"], - "abilities": ["Water Absorb"] - } - ] - }, - "ditto": { - "level": 84, - "sets": [ - { - "role": "Fast Support", - "movepool": ["transform"], - "abilities": ["Imposter"] - } - ] - }, - "vaporeon": { - "level": 84, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["healbell", "icebeam", "protect", "scald", "wish"], - "abilities": ["Water Absorb"] - }, - { - "role": "Staller", - "movepool": ["protect", "scald", "toxic", "wish"], - "abilities": ["Water Absorb"] - } - ] - }, - "jolteon": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["hiddenpowerice", "shadowball", "thunderbolt", "voltswitch"], - "abilities": ["Volt Absorb"] - }, - { - "role": "Wallbreaker", - "movepool": ["hiddenpowerice", "signalbeam", "thunderbolt", "voltswitch"], - "abilities": ["Volt Absorb"] - } - ] - }, - "flareon": { - "level": 88, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"], - "abilities": ["Guts"] - } - ] - }, - "omastar": { - "level": 83, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"], - "abilities": ["Shell Armor", "Swift Swim"] - } - ] - }, - "kabutops": { - "level": 87, - "sets": [ - { - "role": "Fast Support", - "movepool": ["aquajet", "knockoff", "rapidspin", "stoneedge", "waterfall"], - "abilities": ["Battle Armor", "Swift Swim"] - }, - { - "role": "Setup Sweeper", - "movepool": ["aquajet", "knockoff", "stoneedge", "swordsdance", "waterfall"], - "abilities": ["Weak Armor"] - } - ] - }, - "aerodactyl": { - "level": 82, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"], - "abilities": ["Unnerve"] - }, - { - "role": "Fast Support", - "movepool": ["aerialace", "aquatail", "defog", "earthquake", "roost", "stealthrock", "stoneedge"], - "abilities": ["Unnerve"], - "preferredTypes": ["Ground"] - } - ] - }, - "aerodactylmega": { - "level": 77, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["hurricane", "earthquake", "honeclaws", "roost", "stoneedge"], - "abilities": ["Unnerve"], - "preferredTypes": ["Ground"] - } - ] - }, - "snorlax": { - "level": 81, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "sleeptalk"], - "abilities": ["Thick Fat"] - } - ] - }, - "articuno": { - "level": 84, - "sets": [ - { - "role": "Staller", - "movepool": ["freezedry", "roost", "substitute", "toxic"], - "abilities": ["Pressure"] - }, - { - "role": "Bulky Support", - "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"], - "abilities": ["Pressure"] - } - ] - }, - "zapdos": { - "level": 78, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["defog", "discharge", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn"], - "abilities": ["Static"] - } - ] - }, - "moltres": { - "level": 81, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"], - "abilities": ["Flame Body"] - } - ] - }, - "dragonite": { - "level": 73, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "ironhead", "outrage", "roost"], - "abilities": ["Multiscale"], - "preferredTypes": ["Ground"] - } - ] - }, - "mewtwo": { - "level": 70, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"], - "abilities": ["Unnerve"] - } - ] - }, - "mewtwomegax": { - "level": 69, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["bulkup", "drainpunch", "stoneedge", "taunt", "zenheadbutt"], - "abilities": ["Unnerve"] - } - ] - }, - "mewtwomegay": { - "level": 69, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"], - "abilities": ["Unnerve"] - } - ] - }, - "mew": { - "level": 80, - "sets": [ - { - "role": "Staller", - "movepool": ["defog", "knockoff", "psychic", "roost", "stealthrock", "taunt", "uturn", "willowisp"], - "abilities": ["Synchronize"] - }, - { - "role": "Setup Sweeper", - "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "psyshock", "roost"], - "abilities": ["Synchronize"] - }, - { - "role": "Fast Attacker", - "movepool": ["drainpunch", "knockoff", "swordsdance", "zenheadbutt"], - "abilities": ["Synchronize"] - } - ] - }, - "meganium": { - "level": 92, - "sets": [ - { - "role": "Staller", - "movepool": ["aromatherapy", "dragontail", "earthquake", "energyball", "leechseed", "synthesis", "toxic"], - "abilities": ["Overgrow"] - } - ] - }, - "typhlosion": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"], - "abilities": ["Flash Fire"] - } - ] - }, - "feraligatr": { - "level": 79, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["crunch", "dragondance", "earthquake", "icepunch", "waterfall"], - "abilities": ["Sheer Force"], - "preferredTypes": ["Ice"] - } - ] - }, - "furret": { - "level": 93, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["aquatail", "doubleedge", "firepunch", "knockoff", "trick", "uturn"], - "abilities": ["Frisk"], - "preferredTypes": ["Dark"] - } - ] - }, - "noctowl": { - "level": 95, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["airslash", "defog", "hypervoice", "roost", "toxic"], - "abilities": ["Tinted Lens"], - "preferredTypes": ["Normal"] - } - ] - }, - "ledian": { - "level": 100, - "sets": [ - { - "role": "Staller", - "movepool": ["encore", "focusblast", "knockoff", "roost", "toxic"], - "abilities": ["Early Bird"], - "preferredTypes": ["Dark"] - } - ] - }, - "ariados": { - "level": 91, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["megahorn", "poisonjab", "stickyweb", "suckerpunch", "toxicspikes"], - "abilities": ["Insomnia", "Swarm"] - } - ] - }, - "crobat": { - "level": 80, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "roost", "superfang", "taunt", "toxic", "uturn"], - "abilities": ["Infiltrator"] - } - ] - }, - "lanturn": { - "level": 86, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "toxic", "voltswitch"], - "abilities": ["Volt Absorb"] - } - ] - }, - "xatu": { - "level": 87, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "heatwave", "psychic", "roost"], - "abilities": ["Magic Bounce"] - }, - { - "role": "Bulky Support", - "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"], - "abilities": ["Magic Bounce"] - } - ] - }, - "ampharos": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["focusblast", "healbell", "slackoff", "thunderbolt", "toxic", "voltswitch", "defog"], - "abilities": ["Static"] - } - ] - }, - "ampharosmega": { - "level": 82, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["agility", "dragonpulse", "aurasphere", "thunderbolt", "voltswitch"], - "abilities": ["Static"] - }, - { - "role": "Bulky Support", - "movepool": ["dragonpulse", "aurasphere", "slackoff", "voltswitch", "thunderbolt", "defog"], - "abilities": ["Static"] - } - ] - }, - "bellossom": { - "level": 96, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["gigadrain", "hiddenpowerground", "leechseed", "moonblast", "sleeppowder", "sludgebomb", "synthesis", "toxic"], - "abilities": ["Chlorophyll"] - }, - { - "role": "Bulky Setup", - "movepool": ["drainpunch", "leafblade", "return", "swordsdance"], - "abilities": ["Chlorophyll"] - } - ] - }, - "azumarill": { - "level": 81, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["aquajet", "bellydrum", "knockoff", "playrough", "superpower", "waterfall"], - "abilities": ["Huge Power"] - } - ] - }, - "sudowoodo": { - "level": 94, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "stealthrock", "stoneedge", "suckerpunch", "toxic", "woodhammer"], - "abilities": ["Rock Head"], - "preferredTypes": ["Grass"] - } - ] - }, - "politoed": { - "level": 86, - "sets": [ - { - "role": "Staller", - "movepool": ["encore", "icebeam", "protect", "scald", "toxic"], - "abilities": ["Drizzle"] - }, - { - "role": "Bulky Support", - "movepool": ["encore", "icebeam", "rest", "scald", "toxic"], - "abilities": ["Drizzle"] - } - ] - }, - "jumpluff": { - "level": 90, - "sets": [ - { - "role": "Staller", - "movepool": ["acrobatics", "leechseed", "protect", "substitute"], - "abilities": ["Infiltrator"] - }, - { - "role": "Bulky Attacker", - "movepool": ["acrobatics", "encore", "sleeppowder", "toxic", "uturn"], - "abilities": ["Infiltrator"] - } - ] - }, - "sunflora": { - "level": 100, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"], - "abilities": ["Chlorophyll"] - }, - { - "role": "Setup Sweeper", - "movepool": ["earthpower", "hiddenpowerfire", "solarbeam", "sunnyday"], - "abilities": ["Chlorophyll"] - } - ] - }, - "quagsire": { - "level": 87, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"], - "abilities": ["Unaware"] - } - ] - }, - "espeon": { - "level": 81, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["calmmind", "dazzlinggleam", "morningsun", "psychic", "psyshock", "shadowball", "trick"], - "abilities": ["Magic Bounce"], - "preferredTypes": ["Fairy"] - } - ] - }, - "umbreon": { - "level": 83, - "sets": [ - { - "role": "Staller", - "movepool": ["foulplay", "protect", "toxic", "wish"], - "abilities": ["Synchronize"] - }, - { - "role": "Bulky Support", - "movepool": ["foulplay", "healbell", "moonlight", "toxic"], - "abilities": ["Synchronize"] - } - ] - }, - "murkrow": { - "level": 90, - "sets": [ - { - "role": "Staller", - "movepool": ["bravebird", "defog", "foulplay", "haze", "roost", "thunderwave"], - "abilities": ["Prankster"] - } - ] - }, - "slowking": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"], - "abilities": ["Regenerator"] - }, - { - "role": "AV Pivot", - "movepool": ["dragontail", "fireblast", "futuresight", "icebeam", "psyshock", "scald"], - "abilities": ["Regenerator"] - } - ] - }, - "unown": { - "level": 100, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["hiddenpowerfighting", "hiddenpowerpsychic"], - "abilities": ["Levitate"] - } - ] - }, - "wobbuffet": { - "level": 93, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["counter", "destinybond", "encore", "mirrorcoat"], - "abilities": ["Shadow Tag"] - } - ] - }, - "girafarig": { - "level": 93, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["dazzlinggleam", "hypervoice", "nastyplot", "psychic", "psyshock", "substitute", "thunderbolt"], - "abilities": ["Sap Sipper"], - "preferredTypes": ["Psychic"] - } - ] - }, - "forretress": { - "level": 82, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["gyroball", "rapidspin", "spikes", "stealthrock", "toxic"], - "abilities": ["Sturdy"] - }, - { - "role": "Bulky Support", - "movepool": ["gyroball", "rapidspin", "stealthrock", "toxicspikes", "voltswitch"], - "abilities": ["Sturdy"] - } - ] - }, - "dunsparce": { - "level": 93, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "glare", "headbutt", "roost"], - "abilities": ["Serene Grace"] - }, - { - "role": "Bulky Setup", - "movepool": ["bodyslam", "coil", "earthquake", "roost"], - "abilities": ["Serene Grace"] - } - ] - }, - "gligar": { - "level": 82, - "sets": [ - { - "role": "Staller", - "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "toxic", "uturn"], - "abilities": ["Immunity"] - } - ] - }, - "steelix": { - "level": 83, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["earthquake", "ironhead", "roar", "rockslide", "stealthrock", "toxic"], - "abilities": ["Sheer Force"], - "preferredTypes": ["Steel"] - }, - { - "role": "Staller", - "movepool": ["earthquake", "heavyslam", "protect", "toxic"], - "abilities": ["Sturdy"] - }, - { - "role": "Bulky Support", - "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic", "rapidspin"], - "abilities": ["Sturdy"] - } - ] - }, - "steelixmega": { - "level": 80, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["heatcrash", "earthquake", "heavyslam", "stealthrock", "toxic"], - "abilities": ["Sturdy"] - }, - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "heavyslam", "rest", "sleeptalk"], - "abilities": ["Sturdy"] - } - ] - }, - "granbull": { - "level": 87, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "healbell", "playrough", "thunderwave", "toxic"], - "abilities": ["Intimidate"] - } - ] - }, - "qwilfish": { - "level": 84, - "sets": [ - { - "role": "Fast Support", - "movepool": ["destinybond", "poisonjab", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"], - "abilities": ["Intimidate"] - } - ] - }, - "scizor": { - "level": 78, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"], - "abilities": ["Technician"] - }, - { - "role": "Bulky Support", - "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"], - "abilities": ["Technician"] - }, - { - "role": "Fast Attacker", - "movepool": ["bulletpunch", "knockoff", "pursuit", "superpower", "uturn"], - "abilities": ["Technician"] - } - ] - }, - "scizormega": { - "level": 74, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"], - "abilities": ["Light Metal"] - }, - { - "role": "Bulky Support", - "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"], - "abilities": ["Light Metal"] - } - ] - }, - "shuckle": { - "level": 84, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["encore", "knockoff", "stealthrock", "stickyweb", "toxic"], - "abilities": ["Sturdy"] - } - ] - }, - "heracross": { - "level": 79, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["closecombat", "facade", "knockoff", "megahorn", "icepunch"], - "abilities": ["Guts"] - }, - { - "role": "Fast Attacker", - "movepool": ["closecombat", "knockoff", "megahorn", "stoneedge", "icepunch"], - "abilities": ["Moxie"] - } - ] - }, - "heracrossmega": { - "level": 77, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["closecombat", "earthquake", "knockoff", "megahorn", "healorder", "icepunch", "swordsdance"], - "abilities": ["Moxie"], - "preferredTypes": ["Ice"] - }, - { - "role": "Bulky Support", - "movepool": ["circlethrow", "spikes", "knockoff", "healorder"], - "abilities": ["Moxie"] - } - ] - }, - "ursaring": { - "level": 85, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["closecombat", "crunch", "facade", "protect"], - "abilities": ["Guts"] - }, - { - "role": "Setup Sweeper", - "movepool": ["closecombat", "crunch", "facade", "swordsdance"], - "abilities": ["Quick Feet"] - } - ] - }, - "magcargo": { - "level": 98, - "sets": [ - { - "role": "Staller", - "movepool": ["ancientpower", "lavaplume", "recover", "stealthrock", "toxic"], - "abilities": ["Flame Body"] - } - ] - }, - "corsola": { - "level": 99, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"], - "abilities": ["Regenerator"] - } - ] - }, - "octillery": { - "level": 93, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald"], - "abilities": ["Sniper"], - "preferredTypes": ["Poison"] - }, - { - "role": "Bulky Attacker", - "movepool": ["energyball", "fireblast", "gunkshot", "icebeam", "scald", "thunderwave"], - "abilities": ["Sniper"], - "preferredTypes": ["Poison"] - } - ] - }, - "delibird": { - "level": 100, - "sets": [ - { - "role": "Fast Support", - "movepool": ["destinybond", "freezedry", "rapidspin", "spikes"], - "abilities": ["Insomnia", "Vital Spirit"] - } - ] - }, - "mantine": { - "level": 90, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["airslash", "defog", "haze", "rest", "scald", "toxic"], - "abilities": ["Water Absorb"] - }, - { - "role": "Staller", - "movepool": ["rest", "scald", "sleeptalk", "toxic"], - "abilities": ["Water Absorb"] - } - ] - }, - "skarmory": { - "level": 74, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"], - "abilities": ["Sturdy"] - }, - { - "role": "Bulky Attacker", - "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"], - "abilities": ["Sturdy"] - } - ] - }, - "houndoom": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "suckerpunch", "toxicspikes"], - "abilities": ["Flash Fire"] - } - ] - }, - "houndoommega": { - "level": 80, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "taunt"], - "abilities": ["Flash Fire"] - }, - { - "role": "Fast Attacker", - "movepool": ["darkpulse", "fireblast", "toxicspikes", "sludgebomb"], - "abilities": ["Flash Fire"] - } - ] - }, - "kingdra": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"], - "abilities": ["Swift Swim"] - }, - { - "role": "Fast Attacker", - "movepool": ["dragondance", "ironhead", "outrage", "waterfall"], - "abilities": ["Sniper", "Swift Swim"] - } - ] - }, - "donphan": { - "level": 83, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic"], - "abilities": ["Sturdy"] - } - ] - }, - "porygon2": { - "level": 81, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"], - "abilities": ["Download", "Trace"] - } - ] - }, - "stantler": { - "level": 90, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch", "thunderwave"], - "abilities": ["Intimidate"], - "preferredTypes": ["Ground"] - } - ] - }, - "smeargle": { - "level": 89, - "sets": [ - { - "role": "Fast Support", - "movepool": ["nuzzle", "spikes", "spore", "stealthrock", "stickyweb", "whirlwind"], - "abilities": ["Own Tempo"] - } - ] - }, - "hitmontop": { - "level": 89, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"], - "abilities": ["Intimidate"] - } - ] - }, - "miltank": { - "level": 84, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"], - "abilities": ["Sap Sipper", "Thick Fat"] - } - ] - }, - "blissey": { - "level": 84, - "sets": [ - { - "role": "Staller", - "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"], - "abilities": ["Natural Cure"] - }, - { - "role": "Bulky Support", - "movepool": ["protect", "seismictoss", "toxic", "wish"], - "abilities": ["Natural Cure"] - } - ] - }, - "raikou": { - "level": 79, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"], - "abilities": ["Pressure"] - }, - { - "role": "Bulky Setup", - "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"], - "abilities": ["Pressure"], - "preferredTypes": ["Ice"] - } - ] - }, - "entei": { - "level": 77, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["bulldoze", "extremespeed", "flareblitz", "sacredfire"], - "abilities": ["Pressure"] - }, - { - "role": "Fast Attacker", - "movepool": ["extremespeed", "flareblitz", "sacredfire", "stoneedge"], - "abilities": ["Pressure"] - } - ] - }, - "suicune": { - "level": 80, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "rest", "scald", "sleeptalk"], - "abilities": ["Pressure"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "icebeam", "rest", "scald", "substitute"], - "abilities": ["Pressure"] - }, - { - "role": "Staller", - "movepool": ["calmmind", "protect", "scald", "substitute"], - "abilities": ["Pressure"] - } - ] - }, - "tyranitar": { - "level": 80, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge"], - "abilities": ["Sand Stream"] - }, - { - "role": "Bulky Setup", - "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"], - "abilities": ["Sand Stream"] - } - ] - }, - "tyranitarmega": { - "level": 75, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["dragondance", "superpower", "icepunch", "wildcharge"], - "abilities": ["Sand Stream"] - }, - { - "role": "Bulky Attacker", - "movepool": ["stealthrock", "earthquake", "icepunch", "wildcharge"], - "abilities": ["Sand Stream"] - } - ] - }, - "lugia": { - "level": 71, - "sets": [ - { - "role": "Staller", - "movepool": ["aeroblast", "defog", "earthquake", "roost", "substitute", "toxic", "whirlwind"], - "abilities": ["Multiscale"] - } - ] - }, - "hooh": { - "level": 69, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "substitute", "toxic"], - "abilities": ["Regenerator"] - } - ] - }, - "celebi": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "uturn"], - "abilities": ["Natural Cure"], - "preferredTypes": ["Psychic"] - }, - { - "role": "Bulky Support", - "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"], - "abilities": ["Natural Cure"] - }, - { - "role": "Bulky Setup", - "movepool": ["leafstorm", "nastyplot", "psychic", "recover"], - "abilities": ["Natural Cure"] - } - ] - }, - "sceptile": { - "level": 85, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"], - "abilities": ["Overgrow"] - }, - { - "role": "Setup Sweeper", - "movepool": ["focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "calmmind"], - "abilities": ["Unburden"] - }, - { - "role": "Staller", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"], - "abilities": ["Overgrow"] - } - ] - }, - "sceptilemega": { - "level": 81, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["focusblast", "leafstorm", "dragonpulse", "sludgewave"], - "abilities": ["Overgrow"] - }, - { - "role": "Setup Sweeper", - "movepool": ["focusblast", "gigadrain", "dragonpulse", "calmmind"], - "abilities": ["Overgrow"] - } - ] - }, - "combusken": { - "level": 93, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["flareblitz", "focusblast", "hiddenpowerelectric", "protect", "hiddenpowerice"], - "abilities": ["Speed Boost"] - } - ] - }, - "blaziken": { - "level": 85, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["flareblitz", "closecombat", "knockoff", "stoneedge", "swordsdance"], - "abilities": ["Blaze"] - } - ] - }, - "blazikenmega": { - "level": 78, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["flareblitz", "closecombat", "knockoff", "stoneedge", "swordsdance"], - "abilities": ["Blaze"] - }, - { - "role": "Fast Attacker", - "movepool": ["flareblitz", "closecombat", "knockoff", "spikes", "uturn"], - "abilities": ["Blaze"] - } - ] - }, - "swampert": { - "level": 82, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic", "toxicspikes"], - "abilities": ["Torrent"] - }, - { - "role": "Staller", - "movepool": ["earthquake", "protect", "scald", "toxic"], - "abilities": ["Torrent"] - } - ] - }, - "swampertmega": { - "level": 81, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "poisonjab", "substitute", "superpower", "waterfall", "toxicspikes"], - "abilities": ["Damp"] - }, - { - "role": "Bulky Setup", - "movepool": ["bulkup", "gunkshot", "earthquake", "waterfall"], - "abilities": ["Damp"] - } - ] - }, - "mightyena": { - "level": 93, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["crunch", "irontail", "playrough", "suckerpunch", "toxic"], - "abilities": ["Intimidate"], - "preferredTypes": ["Fairy"] - } - ] - }, - "linoone": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"], - "abilities": ["Quick Feet"] - } - ] - }, - "beautifly": { - "level": 99, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["aircutter", "bugbuzz", "hiddenpowerground", "quiverdance"], - "abilities": ["Swarm"] - } - ] - }, - "dustox": { - "level": 96, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["bugbuzz", "hiddenpowerground", "quiverdance", "roost", "sludgebomb"], - "abilities": ["Shield Dust"] - }, - { - "role": "Bulky Support", - "movepool": ["bugbuzz", "defog", "roost", "toxic", "uturn"], - "abilities": ["Shield Dust"] - } - ] - }, - "ludicolo": { - "level": 88, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"], - "abilities": ["Swift Swim"] - }, - { - "role": "Wallbreaker", - "movepool": ["energyball", "hydropump", "icebeam", "scald"], - "abilities": ["Swift Swim"] - } - ] - }, - "shiftry": { - "level": 88, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["defog", "knockoff", "leafstorm", "lowkick", "suckerpunch"], - "abilities": ["Chlorophyll", "Pickpocket"] - }, - { - "role": "Setup Sweeper", - "movepool": ["knockoff", "leafblade", "lowkick", "suckerpunch", "swordsdance"], - "abilities": ["Chlorophyll", "Pickpocket"] - } - ] - }, - "swellow": { - "level": 81, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["bravebird", "facade", "protect", "uturn"], - "abilities": ["Guts"] - }, - { - "role": "Wallbreaker", - "movepool": ["bravebird", "facade", "quickattack", "uturn"], - "abilities": ["Guts"] - } - ] - }, - "pelipper": { - "level": 91, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["defog", "hurricane", "knockoff", "roost", "scald", "toxic", "uturn"], - "abilities": ["Rain Dish"] - }, - { - "role": "Bulky Support", - "movepool": ["defog", "knockoff", "roost", "scald", "toxic", "uturn"], - "abilities": ["Rain Dish"] - } - ] - }, - "gardevoir": { - "level": 81, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["calmmind", "focusblast", "healingwish", "moonblast", "psychic", "shadowball", "thunderbolt", "trick"], - "abilities": ["Trace"], - "preferredTypes": ["Fighting"] - }, - { - "role": "Fast Support", - "movepool": ["willowisp", "healingwish", "rapidspin", "psychic", "moonblast"], - "abilities": ["Trace"], - "preferredTypes": ["Fighting"] - }, - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "focusblast", "moonblast", "psyshock", "substitute", "willowisp"], - "abilities": ["Trace"] - } - ] - }, - "gardevoirmega": { - "level": 78, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "encore", "focusblast", "hypervoice", "psyshock", "taunt", "willowisp", "mysticalfire"], - "abilities": ["Trace"] - }, - { - "role": "Fast Attacker", - "movepool": ["focusblast", "hypervoice", "psyshock", "substitute", "taunt", "willowisp", "rapidspin"], - "abilities": ["Trace"], - "preferredTypes": ["Fighting"] - } - ] - }, - "masquerain": { - "level": 90, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance"], - "abilities": ["Intimidate"] - }, - { - "role": "Fast Support", - "movepool": ["airslash", "bugbuzz", "roost", "scald", "stickyweb", "stunspore", "uturn"], - "abilities": ["Intimidate"] - } - ] - }, - "breloom": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["bulletseed", "machpunch", "rocktomb", "spore", "swordsdance"], - "abilities": ["Technician"] - }, - { - "role": "Setup Sweeper", - "movepool": ["bulletseed", "machpunch", "rocktomb", "swordsdance"], - "abilities": ["Technician"] - } - ] - }, - "vigoroth": { - "level": 88, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowclaw", "slackoff"], - "abilities": ["Vital Spirit"] - } - ] - }, - "slaking": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["earthquake", "gigaimpact", "nightslash", "retaliate"], - "abilities": ["Truant"] - }, - { - "role": "Wallbreaker", - "movepool": ["doubleedge", "earthquake", "gigaimpact", "pursuit"], - "abilities": ["Truant"] - } - ] - }, - "ninjask": { - "level": 93, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["aerialace", "nightslash", "swordsdance", "uturn", "xscissor"], - "abilities": ["Infiltrator"] - } - ] - }, - "shedinja": { - "level": 95, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"], - "abilities": ["Wonder Guard"] - } - ] - }, - "exploud": { - "level": 85, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["boomburst", "fireblast", "focusblast", "surf"], - "abilities": ["Scrappy"] - } - ] - }, - "hariyama": { - "level": 86, - "sets": [ - { - "role": "AV Pivot", - "movepool": ["bulletpunch", "closecombat", "heavyslam", "knockoff", "stoneedge"], - "abilities": ["Guts", "Thick Fat"], - "preferredTypes": ["Dark"] - }, - { - "role": "Wallbreaker", - "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "knockoff"], - "abilities": ["Guts"], - "preferredTypes": ["Dark"] - } - ] - }, - "delcatty": { - "level": 100, - "sets": [ - { - "role": "Fast Support", - "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"], - "abilities": ["Wonder Skin"] - } - ] - }, - "sableye": { - "level": 84, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["foulplay", "knockoff", "recover", "taunt", "willowisp"], - "abilities": ["Prankster"] - } - ] - }, - "sableyemega": { - "level": 81, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "darkpulse", "recover", "willowisp"], - "abilities": ["Prankster"] - } - ] - }, - "mawile": { - "level": 89, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance", "slackoff", "rockslide"], - "abilities": ["Intimidate", "Sheer Force"] - }, - { - "role": "Bulky Support", - "movepool": ["knockoff", "playrough", "stealthrock", "slackoff"], - "abilities": ["Intimidate"] - } - ] - }, - "mawilemega": { - "level": 77, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance", "slackoff", "rockslide"], - "abilities": ["Intimidate"] - }, - { - "role": "Wallbreaker", - "movepool": ["ironhead", "knockoff", "playrough", "firepunch", "suckerpunch", "swordsdance", "rockslide"], - "abilities": ["Intimidate"] - } - ] - }, - "aggron": { - "level": 86, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "headsmash", "heavyslam", "rockpolish"], - "abilities": ["Rock Head"] - }, - { - "role": "Wallbreaker", - "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "voltswitch"], - "abilities": ["Rock Head"], - "preferredTypes": ["Ground"] - }, - { - "role": "Bulky Attacker", - "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "stealthrock"], - "abilities": ["Rock Head"], - "preferredTypes": ["Ground"] - } - ] - }, - "aggronmega": { - "level": 78, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "stoneedge", "thunderwave", "toxic"], - "abilities": ["Sturdy"], - "preferredTypes": ["Ground"] - }, - { - "role": "Bulky Attacker", - "movepool": ["voltswitch", "earthquake", "stoneedge", "heavyslam", "stealthrock", "toxic", "protect"], - "abilities": ["Rock Head"], - "preferredTypes": ["Ground"] - } - ] - }, - "medicham": { - "level": 83, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["bulletpunch", "closecombat", "icepunch", "gunkshot", "zenheadbutt", "healingwish"], - "abilities": ["Pure Power"] - } - ] - }, - "medichammega": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["focusblast", "psychic", "psyshock", "thunderbolt", "shadowball", "vacuumwave"], - "abilities": ["Telepathy"], - "preferredTypes": ["Ghost"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "psychic", "recover", "vacuumwave"], - "abilities": ["Telepathy"] - } - ] - }, - "manectric": { - "level": 84, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["flamethrower", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], - "abilities": ["Lightning Rod"] - } - ] - }, - "manectricmega": { - "level": 78, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], - "abilities": ["Lightning Rod"] - } - ] - }, - "plusle": { - "level": 93, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], - "abilities": ["Lightning Rod"], - "preferredTypes": ["Ice"] - }, - { - "role": "Setup Sweeper", - "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"], - "abilities": ["Lightning Rod"] - } - ] - }, - "minun": { - "level": 93, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], - "abilities": ["Volt Absorb"], - "preferredTypes": ["Ice"] - }, - { - "role": "Setup Sweeper", - "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"], - "abilities": ["Volt Absorb"] - } - ] - }, - "volbeat": { - "level": 91, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["encore", "roost", "thunderwave", "uturn"], - "abilities": ["Prankster"] - } - ] - }, - "illumise": { - "level": 91, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["bugbuzz", "encore", "roost", "thunderwave"], - "abilities": ["Prankster"] - } - ] - }, - "swalot": { - "level": 90, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "encore", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"], - "abilities": ["Liquid Ooze"], - "preferredTypes": ["Ground"] - }, - { - "role": "Staller", - "movepool": ["earthquake", "protect", "sludgebomb", "toxic"], - "abilities": ["Liquid Ooze"] - } - ] - }, - "sharpedo": { - "level": 82, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["crunch", "destinybond", "earthquake", "icebeam", "protect", "waterfall"], - "abilities": ["Speed Boost"] - } - ] - }, - "sharpedomega": { - "level": 78, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["thunder", "blizzard", "protect", "hydropump"], - "abilities": ["Speed Boost"] - } - ] - }, - "wailord": { - "level": 93, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"], - "abilities": ["Water Veil"] - } - ] - }, - "camerupt": { - "level": 89, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "fireblast", "rockpolish", "stoneedge"], - "abilities": ["Solid Rock"] - }, - { - "role": "Bulky Support", - "movepool": ["earthquake", "lavaplume", "morningsun", "roar", "stealthrock", "toxic"], - "abilities": ["Solid Rock"] - } - ] - }, - "cameruptmega": { - "level": 86, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["morningsun", "earthpower", "fireblast", "stealthrock", "toxic", "willowisp"], - "abilities": ["Solid Rock"] - } - ] - }, - "torkoal": { - "level": 88, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "lavaplume", "rapidspin", "stealthrock", "yawn"], - "abilities": ["Shell Armor"] - } - ] - }, - "grumpig": { - "level": 92, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic", "whirlwind"], - "abilities": ["Thick Fat"] - } - ] - }, - "spinda": { - "level": 97, - "sets": [ - { - "role": "Staller", - "movepool": ["rest", "return", "sleeptalk", "suckerpunch", "superpower", "thief"], - "abilities": ["Contrary"], - "preferredTypes": ["Fighting"] - } - ] - }, - "flygon": { - "level": 83, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["earthquake", "outrage", "stoneedge", "uturn"], - "abilities": ["Levitate"] - }, - { - "role": "Bulky Support", - "movepool": ["defog", "dracometeor", "earthquake", "roost", "uturn"], - "abilities": ["Levitate"] - } - ] - }, - "cacturne": { - "level": 90, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["darkpulse", "gigadrain", "spikes", "suckerpunch", "superpower"], - "abilities": ["Water Absorb"] - }, - { - "role": "Setup Sweeper", - "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"], - "abilities": ["Water Absorb"] - } - ] - }, - "altaria": { - "level": 88, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["dragondance", "earthquake", "outrage", "roost"], - "abilities": ["Natural Cure"] - }, - { - "role": "Bulky Support", - "movepool": ["dracometeor", "earthquake", "fireblast", "healbell", "roost", "toxic"], - "abilities": ["Natural Cure"] - } - ] - }, - "altariamega": { - "level": 79, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["moonblast", "hydropump", "fireblast", "roost"], - "abilities": ["Natural Cure"] - } - ] - }, - "zangoose": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["closecombat", "facade", "knockoff", "quickattack", "swordsdance"], - "abilities": ["Toxic Boost"], - "preferredTypes": ["Dark"] - } - ] - }, - "seviper": { - "level": 91, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["earthquake", "flamethrower", "gigadrain", "glare", "knockoff", "sludgewave", "suckerpunch", "switcheroo"], - "abilities": ["Infiltrator"], - "preferredTypes": ["Ground"] - } - ] - }, - "lunatone": { - "level": 96, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["earthpower", "icebeam", "moonblast", "moonlight", "psychic", "rockpolish"], - "abilities": ["Levitate"], - "preferredTypes": ["Ground"] - }, - { - "role": "Bulky Support", - "movepool": ["earthpower", "moonlight", "psychic", "stealthrock", "toxic"], - "abilities": ["Levitate"] - } - ] - }, - "solrock": { - "level": 90, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"], - "abilities": ["Levitate"] - } - ] - }, - "whiscash": { - "level": 88, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"], - "abilities": ["Hydration", "Oblivious"] - }, - { - "role": "Staller", - "movepool": ["earthquake", "protect", "scald", "toxic"], - "abilities": ["Hydration", "Oblivious"] - } - ] - }, - "crawdaunt": { - "level": 83, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["aquajet", "crabhammer", "dragondance", "knockoff", "superpower"], - "abilities": ["Adaptability"] - } - ] - }, - "claydol": { - "level": 88, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"], - "abilities": ["Levitate"] - } - ] - }, - "cradily": { - "level": 89, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["curse", "earthquake", "recover", "seedbomb", "stoneedge", "swordsdance"], - "abilities": ["Storm Drain"] - }, - { - "role": "Bulky Attacker", - "movepool": ["earthpower", "gigadrain", "recover", "stealthrock", "stoneedge", "toxic"], - "abilities": ["Storm Drain"], - "preferredTypes": ["Grass"] - } - ] - }, - "armaldo": { - "level": 88, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"], - "abilities": ["Battle Armor", "Swift Swim"] - }, - { - "role": "Bulky Attacker", - "movepool": ["aquajet", "earthquake", "knockoff", "stoneedge", "swordsdance", "xscissor"], - "abilities": ["Battle Armor", "Swift Swim"] - } - ] - }, - "milotic": { - "level": 83, - "sets": [ - { - "role": "Staller", - "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"], - "abilities": ["Competitive", "Marvel Scale"] - } - ] - }, - "castform": { - "level": 97, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"], - "abilities": ["Forecast"], - "preferredTypes": ["Water"] - } - ] - }, - "kecleon": { - "level": 89, - "sets": [ - { - "role": "Fast Support", - "movepool": ["drainpunch", "fakeout", "knockoff", "recover", "shadowsneak", "stealthrock", "suckerpunch"], - "abilities": ["Protean"], - "preferredTypes": ["Fighting"] - }, - { - "role": "Bulky Attacker", - "movepool": ["drainpunch", "knockoff", "recover", "stealthrock", "thunderwave", "toxic"], - "abilities": ["Protean"] - } - ] - }, - "banette": { - "level": 90, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["gunkshot", "knockoff", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"], - "abilities": ["Cursed Body", "Frisk", "Insomnia"] - } - ] - }, - "banettemega": { - "level": 87, - "sets": [ - { - "role": "Fast Support", - "movepool": ["powder", "knockoff", "ironhead", "taunt", "willowisp", "stealthrock", "defog"], - "abilities": ["Frisk"] - } - ] - }, - "tropius": { - "level": 94, - "sets": [ - { - "role": "Staller", - "movepool": ["airslash", "leechseed", "protect", "substitute"], - "abilities": ["Harvest"] - } - ] - }, - "chimecho": { - "level": 97, - "sets": [ - { - "role": "Staller", - "movepool": ["healbell", "knockoff", "psychic", "recover", "toxic"], - "abilities": ["Levitate"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "psychic", "psyshock", "recover", "signalbeam"], - "abilities": ["Levitate"] - } - ] - }, - "absol": { - "level": 84, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["knockoff", "playrough", "pursuit", "suckerpunch", "closecombat", "swordsdance"], - "abilities": ["Justified"], - "preferredTypes": ["Fairy"] - } - ] - }, - "absolmega": { - "level": 80, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["irontail", "knockoff", "playrough", "pursuit", "suckerpunch", "closecombat", "swordsdance"], - "abilities": ["Justified"], - "preferredTypes": ["Fairy"] - }, - { - "role": "Fast Attacker", - "movepool": ["knockoff", "moonblast", "suckerpunch", "closecombat", "fireblast"], - "abilities": ["Justified"] - } - ] - }, - "glalie": { - "level": 91, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "freezedry", "spikes", "superfang", "taunt"], - "abilities": ["Inner Focus"] - } - ] - }, - "glaliemega": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["earthquake", "explosion", "freezedry", "iceshard", "doubleedge", "spikes"], - "abilities": ["Inner Focus"], - "preferredTypes": ["Ground"] - }, - { - "role": "Wallbreaker", - "movepool": ["earthquake", "iceshard", "boomburst", "doubleedge"], - "abilities": ["Inner Focus"], - "preferredTypes": ["Ground"] - } - ] - }, - "walrein": { - "level": 88, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["icebeam", "roar", "superfang", "surf", "toxic"], - "abilities": ["Thick Fat"] - }, - { - "role": "Staller", - "movepool": ["icebeam", "protect", "surf", "toxic"], - "abilities": ["Thick Fat"] - } - ] - }, - "huntail": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["icebeam", "return", "shellsmash", "suckerpunch", "waterfall"], - "abilities": ["Swift Swim", "Water Veil"], - "preferredTypes": ["Ice"] - } - ] - }, - "gorebyss": { - "level": 83, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"], - "abilities": ["Swift Swim"] - } - ] - }, - "relicanth": { - "level": 87, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"], - "abilities": ["Rock Head"] - }, - { - "role": "Wallbreaker", - "movepool": ["doubleedge", "earthquake", "headsmash", "waterfall"], - "abilities": ["Rock Head"] - }, - { - "role": "Bulky Setup", - "movepool": ["earthquake", "headsmash", "rockpolish", "waterfall"], - "abilities": ["Rock Head"] - } - ] - }, - "luvdisc": { - "level": 100, - "sets": [ - { - "role": "Staller", - "movepool": ["icebeam", "protect", "scald", "substitute", "toxic"], - "abilities": ["Hydration"] - } - ] - }, - "salamence": { - "level": 75, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "outrage", "roost", "ironhead"], - "abilities": ["Intimidate", "Moxie"] - } - ] - }, - "salamencemega": { - "level": 74, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["outrage", "dragondance", "earthquake", "hurricane", "roost"], - "abilities": ["Intimidate"] - }, - { - "role": "Fast Attacker", - "movepool": ["hurricane", "fireblast", "dracometeor", "roost"], - "abilities": ["Intimidate"] - } - ] - }, - "metagross": { - "level": 80, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["agility", "earthquake", "icepunch", "meteormash", "thunderpunch", "zenheadbutt"], - "abilities": ["Clear Body"], - "preferredTypes": ["Ground"] - }, - { - "role": "Bulky Support", - "movepool": ["bulletpunch", "earthquake", "explosion", "icepunch", "meteormash", "stealthrock", "thunderpunch", "zenheadbutt"], - "abilities": ["Clear Body"], - "preferredTypes": ["Ground"] - } - ] - }, - "metagrossmega": { - "level": 74, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["agility", "earthquake", "hammerarm", "meteormash", "zenheadbutt"], - "abilities": ["Clear Body"], - "preferredTypes": ["Psychic"] - }, - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "hammerarm", "honeclaws", "meteormash", "zenheadbutt"], - "abilities": ["Clear Body"], - "preferredTypes": ["Psychic"] - } - ] - }, - "regirock": { - "level": 86, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["curse", "drainpunch", "rest", "stoneedge"], - "abilities": ["Sturdy"] - }, - { - "role": "Bulky Support", - "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"], - "abilities": ["Sturdy"] - } - ] - }, - "regice": { - "level": 87, - "sets": [ - { - "role": "Staller", - "movepool": ["icebeam", "protect", "thunderbolt", "toxic"], - "abilities": ["Clear Body"] - }, - { - "role": "Bulky Attacker", - "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"], - "abilities": ["Clear Body"], - "preferredTypes": ["Electric"] - }, - { - "role": "Bulky Setup", - "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"], - "abilities": ["Clear Body"] - } - ] - }, - "registeel": { - "level": 82, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["curse", "ironhead", "rest", "sleeptalk"], - "abilities": ["Clear Body"] - }, - { - "role": "Bulky Support", - "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"], - "abilities": ["Clear Body"] - }, - { - "role": "Staller", - "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"], - "abilities": ["Clear Body"] - } - ] - }, - "latias": { - "level": 74, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], - "abilities": ["Levitate"] - } - ] - }, - "latiasmega": { - "level": 77, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], - "abilities": ["Levitate"] - } - ] - }, - "latios": { - "level": 72, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], - "abilities": ["Levitate"] - } - ] - }, - "latiosmega": { - "level": 77, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "dracometeor", "psyshock", "roost"], - "abilities": ["Levitate"] - }, - { - "role": "Setup Sweeper", - "movepool": ["dragondance", "zenheadbutt", "dracometeor", "earthquake"], - "abilities": ["Levitate"] - }, - { - "role": "Fast Attacker", - "movepool": ["defog", "dracometeor", "psyshock", "roost", "icebeam"], - "abilities": ["Levitate"] - } - ] - }, - "kyogre": { - "level": 67, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["icebeam", "originpulse", "scald", "thunder", "waterspout"], - "abilities": ["Drizzle"] - } - ] - }, - "kyogreprimal": { - "level": 71, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "rest", "scald", "sleeptalk"], - "abilities": ["Drizzle"] - }, - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "icebeam", "originpulse", "thunder"], - "abilities": ["Drizzle"] - } - ] - }, - "groudon": { - "level": 74, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "stoneedge", "thunderwave"], - "abilities": ["Drought"] - }, - { - "role": "Bulky Setup", - "movepool": ["firepunch", "precipiceblades", "rockpolish", "stoneedge", "swordsdance"], - "abilities": ["Drought"] - } - ] - }, - "groudonprimal": { - "level": 64, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "thunderwave"], - "abilities": ["Drought"] - }, - { - "role": "Bulky Setup", - "movepool": ["firepunch", "precipiceblades", "rockpolish", "swordsdance"], - "abilities": ["Drought"] - } - ] - }, - "rayquaza": { - "level": 72, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["dracometeor", "earthquake", "extremespeed", "outrage", "vcreate"], - "abilities": ["Air Lock"] - }, - { - "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "vcreate", "coil"], - "abilities": ["Air Lock"] - }, - { - "role": "Fast Attacker", - "movepool": ["earthquake", "extremespeed", "outrage", "swordsdance", "vcreate"], - "abilities": ["Air Lock"], - "preferredTypes": ["Normal"] - } - ] - }, - "rayquazamega": { - "level": 65, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate", "coil"], - "abilities": ["Air Lock"] - } - ] - }, - "jirachi": { - "level": 78, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"], - "abilities": ["Serene Grace"] - } - ] - }, - "deoxys": { - "level": 74, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"], - "abilities": ["Pressure"] - }, - { - "role": "Fast Attacker", - "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"], - "abilities": ["Pressure"] - } - ] - }, - "deoxysattack": { - "level": 72, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"], - "abilities": ["Pressure"] - }, - { - "role": "Fast Attacker", - "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"], - "abilities": ["Pressure"] - } - ] - }, - "deoxysdefense": { - "level": 84, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["knockoff", "recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"], - "abilities": ["Pressure"] - }, - { - "role": "Bulky Setup", - "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "recover", "signalbeam"], - "abilities": ["Pressure"] - } - ] - }, - "deoxysspeed": { - "level": 81, - "sets": [ - { - "role": "Fast Support", - "movepool": ["knockoff", "psychoboost", "spikes", "stealthrock", "superpower", "taunt"], - "abilities": ["Pressure"] - }, - { - "role": "Setup Sweeper", - "movepool": ["darkpulse", "focusblast", "nastyplot", "psychoboost"], - "abilities": ["Pressure"] - } - ] - }, - "torterra": { - "level": 87, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"], - "abilities": ["Overgrow"] - }, - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"], - "abilities": ["Overgrow"] - } - ] - }, - "infernape": { - "level": 79, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"], - "abilities": ["Blaze", "Iron Fist"] - }, - { - "role": "Fast Support", - "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"], - "abilities": ["Blaze", "Iron Fist"] - } - ] - }, - "empoleon": { - "level": 82, - "sets": [ - { - "role": "Staller", - "movepool": ["defog", "knockoff", "protect", "scald", "stealthrock", "toxic"], - "abilities": ["Torrent"] - }, - { - "role": "Bulky Support", - "movepool": ["defog", "icebeam", "knockoff", "roar", "scald", "toxic"], - "abilities": ["Torrent"] - }, - { - "role": "Bulky Attacker", - "movepool": ["flashcannon", "grassknot", "hydropump", "icebeam", "knockoff", "scald"], - "abilities": ["Torrent"] - } - ] - }, - "staraptor": { - "level": 78, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["bravebird", "closecombat", "doubleedge", "quickattack", "uturn"], - "abilities": ["Reckless"], - "preferredTypes": ["Fighting"] - } - ] - }, - "bibarel": { - "level": 95, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["quickattack", "return", "waterfall", "workup"], - "abilities": ["Simple"] - }, - { - "role": "Bulky Setup", - "movepool": ["curse", "quickattack", "return", "waterfall"], - "abilities": ["Simple"] - } - ] - }, - "kricketune": { - "level": 98, - "sets": [ - { - "role": "Fast Support", - "movepool": ["bugbite", "knockoff", "stickyweb", "taunt", "toxic"], - "abilities": ["Technician"] - } - ] - }, - "luxray": { - "level": 88, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["crunch", "facade", "superpower", "wildcharge"], - "abilities": ["Guts"] - }, - { - "role": "AV Pivot", - "movepool": ["crunch", "icefang", "superpower", "voltswitch", "wildcharge"], - "abilities": ["Intimidate"], - "preferredTypes": ["Fighting"] - } - ] - }, - "roserade": { - "level": 83, - "sets": [ - { - "role": "Fast Support", - "movepool": ["gigadrain", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"], - "abilities": ["Natural Cure", "Technician"] - } - ] - }, - "rampardos": { - "level": 87, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "firepunch", "rockpolish", "rockslide", "zenheadbutt"], - "abilities": ["Sheer Force"] - }, - { - "role": "Fast Attacker", - "movepool": ["earthquake", "firepunch", "headsmash", "rockslide"], - "abilities": ["Sheer Force"] - } - ] - }, - "bastiodon": { - "level": 95, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["metalburst", "protect", "roar", "rockslide", "stealthrock", "toxic"], - "abilities": ["Sturdy"] - } - ] - }, - "wormadam": { - "level": 100, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "signalbeam", "synthesis", "toxic"], - "abilities": ["Anticipation", "Overcoat"] - }, - { - "role": "Wallbreaker", - "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "psychic", "signalbeam"], - "abilities": ["Anticipation", "Overcoat"] - }, - { - "role": "Staller", - "movepool": ["gigadrain", "hiddenpowerground", "protect", "toxic"], - "abilities": ["Anticipation", "Overcoat"] - } - ] - }, - "wormadamsandy": { - "level": 90, - "sets": [ - { - "role": "Staller", - "movepool": ["earthquake", "infestation", "protect", "stealthrock", "toxic"], - "abilities": ["Overcoat"] - } - ] - }, - "wormadamtrash": { - "level": 88, - "sets": [ - { - "role": "Staller", - "movepool": ["flashcannon", "infestation", "protect", "stealthrock", "toxic"], - "abilities": ["Overcoat"] - } - ] - }, - "mothim": { - "level": 94, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"], - "abilities": ["Tinted Lens"] - } - ] - }, - "vespiquen": { - "level": 100, - "sets": [ - { - "role": "Staller", - "movepool": ["airslash", "defog", "roost", "toxic", "uturn"], - "abilities": ["Pressure"] - } - ] - }, - "pachirisu": { - "level": 95, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["nuzzle", "superfang", "thunderbolt", "toxic", "uturn"], - "abilities": ["Volt Absorb"] - } - ] - }, - "floatzel": { - "level": 86, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["bulkup", "icepunch", "lowkick", "substitute", "waterfall"], - "abilities": ["Water Veil"], - "preferredTypes": ["Ice"] - }, - { - "role": "Fast Attacker", - "movepool": ["aquajet", "crunch", "icepunch", "lowkick", "waterfall"], - "abilities": ["Water Veil"], - "preferredTypes": ["Ice"] - } - ] - }, - "cherrim": { - "level": 97, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["dazzlinggleam", "energyball", "healingwish", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerrock", "morningsun"], - "abilities": ["Flower Gift"] - }, - { - "role": "Staller", - "movepool": ["aromatherapy", "energyball", "hiddenpowerground", "leechseed", "morningsun", "toxic"], - "abilities": ["Flower Gift"] - } - ] - }, - "gastrodon": { - "level": 86, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"], - "abilities": ["Storm Drain"] - } - ] - }, - "ambipom": { - "level": 83, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["fakeout", "knockoff", "lowkick", "return", "uturn"], - "abilities": ["Technician"], - "preferredTypes": ["Dark"] - } - ] - }, - "drifblim": { - "level": 83, - "sets": [ - { - "role": "Fast Support", - "movepool": ["acrobatics", "defog", "destinybond", "shadowball", "substitute", "willowisp"], - "abilities": ["Unburden"] - }, - { - "role": "Bulky Support", - "movepool": ["acrobatics", "hex", "substitute", "willowisp"], - "abilities": ["Unburden"] - } - ] - }, - "lopunny": { - "level": 86, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["healingwish", "highjumpkick", "icepunch", "return", "switcheroo"], - "abilities": ["Limber"] - } - ] - }, - "lopunnymega": { - "level": 76, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["encore", "fakeout", "highjumpkick", "poweruppunch", "return", "substitute"], - "abilities": ["Limber"] - } - ] - }, - "mismagius": { - "level": 85, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["dazzlinggleam", "destinybond", "painsplit", "shadowball", "taunt", "willowisp"], - "abilities": ["Levitate"] - }, - { - "role": "Wallbreaker", - "movepool": ["dazzlinggleam", "nastyplot", "shadowball", "thunderbolt", "trick"], - "abilities": ["Levitate"] - } - ] - }, - "honchkrow": { - "level": 82, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"], - "abilities": ["Moxie"] - } - ] - }, - "purugly": { - "level": 88, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["fakeout", "knockoff", "return", "uturn", "wakeupslap"], - "abilities": ["Defiant", "Thick Fat"], - "preferredTypes": ["Dark"] - } - ] - }, - "skuntank": { - "level": 85, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["crunch", "defog", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"], - "abilities": ["Aftermath"] - } - ] - }, - "bronzong": { - "level": 85, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"], - "abilities": ["Levitate"], - "preferredTypes": ["Ground"] - }, - { - "role": "Staller", - "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"], - "abilities": ["Levitate"], - "preferredTypes": ["Ground"] - } - ] - }, - "chatot": { - "level": 86, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["boomburst", "chatter", "heatwave", "hiddenpowerground", "uturn"], - "abilities": ["Tangled Feet"] - }, - { - "role": "Setup Sweeper", - "movepool": ["boomburst", "chatter", "heatwave", "nastyplot", "substitute"], - "abilities": ["Tangled Feet"] - } - ] - }, - "spiritomb": { - "level": 88, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"], - "abilities": ["Infiltrator"] - }, - { - "role": "Bulky Attacker", - "movepool": ["foulplay", "painsplit", "pursuit", "suckerpunch", "toxic", "willowisp"], - "abilities": ["Infiltrator"] - } - ] - }, - "garchomp": { - "level": 75, - "sets": [ - { - "role": "Fast Support", - "movepool": ["dragonclaw", "earthquake", "fireblast", "outrage", "stealthrock", "stoneedge", "toxic"], - "abilities": ["Rough Skin"] - }, - { - "role": "Fast Attacker", - "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"], - "abilities": ["Rough Skin"] - } - ] - }, - "garchompmega": { - "level": 76, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["dracometeor", "earthquake", "fireblast", "stealthrock", "stoneedge"], - "abilities": ["Rough Skin"] - }, - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"], - "abilities": ["Rough Skin"] - } - ] - }, - "lucario": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["bulletpunch", "closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"], - "abilities": ["Justified"], - "preferredTypes": ["Normal"] - }, - { - "role": "Setup Sweeper", - "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"], - "abilities": ["Inner Focus"] - } - ] - }, - "lucariomega": { - "level": 79, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["bulletpunch", "closecombat", "meteormash", "swordsdance"], - "abilities": ["Justified"] - }, - { - "role": "Setup Sweeper", - "movepool": ["focusblast", "flashcannon", "nastyplot", "vacuumwave"], - "abilities": ["Justified"] - } - ] - }, - "hippowdon": { - "level": 81, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"], - "abilities": ["Sand Stream"] - } - ] - }, - "drapion": { - "level": 83, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["aquatail", "earthquake", "knockoff", "poisonjab", "pursuit", "swordsdance"], - "abilities": ["Battle Armor"], - "preferredTypes": ["Ground"] - }, - { - "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "poisonjab", "taunt", "toxicspikes", "whirlwind"], - "abilities": ["Battle Armor"] - } - ] - }, - "toxicroak": { - "level": 83, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["drainpunch", "earthquake", "gunkshot", "knockoff", "substitute", "suckerpunch", "swordsdance"], - "abilities": ["Dry Skin"] - } - ] - }, - "carnivine": { - "level": 100, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["knockoff", "powerwhip", "sleeppowder", "swordsdance", "synthesis", "toxic"], - "abilities": ["Levitate"] - } - ] - }, - "lumineon": { - "level": 90, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["defog", "icebeam", "scald", "toxic", "uturn"], - "abilities": ["Storm Drain"] - } - ] - }, - "abomasnow": { - "level": 84, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"], - "abilities": ["Snow Warning"], - "preferredTypes": ["Ground"] - } - ] - }, - "abomasnowmega": { - "level": 82, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["icebeam", "earthquake", "gigadrain", "iceshard", "woodhammer"], - "abilities": ["Snow Warning"], - "preferredTypes": ["Ground"] - }, - { - "role": "Bulky Support", - "movepool": ["icebeam", "gigadrain", "leechseed", "earthquake"], - "abilities": ["Snow Warning"] - } - ] - }, - "weavile": { - "level": 77, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["iceshard", "iciclecrash", "knockoff", "lowkick", "pursuit", "swordsdance"], - "abilities": ["Pickpocket"] - } - ] - }, - "magnezone": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["flashcannon", "hiddenpowerground", "thunderbolt", "voltswitch"], - "abilities": ["Analytic", "Magnet Pull"] - }, - { - "role": "Staller", - "movepool": ["flashcannon", "protect", "thunderbolt", "toxic"], - "abilities": ["Analytic"] - } - ] - }, - "lickilicky": { - "level": 88, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["bodyslam", "knockoff", "protect", "wish"], - "abilities": ["Cloud Nine", "Oblivious"] - }, - { - "role": "AV Pivot", - "movepool": ["bodyslam", "dragontail", "earthquake", "explosion", "knockoff", "powerwhip"], - "abilities": ["Cloud Nine", "Own Tempo"], - "preferredTypes": ["Ground"] - }, - { - "role": "Bulky Setup", - "movepool": ["bodyslam", "earthquake", "explosion", "knockoff", "powerwhip", "return", "swordsdance"], - "abilities": ["Cloud Nine", "Oblivious"], - "preferredTypes": ["Dark"] - } - ] - }, - "rhyperior": { - "level": 82, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["dragontail", "earthquake", "icepunch", "megahorn", "stoneedge"], - "abilities": ["Solid Rock"] - }, - { - "role": "Bulky Setup", - "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge"], - "abilities": ["Solid Rock"] - } - ] - }, - "tangrowth": { - "level": 88, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "knockoff", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder", "sludgebomb"], - "abilities": ["Regenerator"] - }, - { - "role": "AV Pivot", - "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"], - "abilities": ["Regenerator"] - } - ] - }, - "electivire": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"], - "abilities": ["Motor Drive"], - "preferredTypes": ["Ice"] - } - ] - }, - "magmortar": { - "level": 86, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"], - "abilities": ["Flame Body"], - "preferredTypes": ["Electric"] - } - ] - }, - "togekiss": { - "level": 79, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"], - "abilities": ["Serene Grace"] - }, - { - "role": "Bulky Attacker", - "movepool": ["airslash", "defog", "healbell", "roost", "thunderwave"], - "abilities": ["Serene Grace"] - }, - { - "role": "Fast Attacker", - "movepool": ["airslash", "aurasphere", "dazzlinggleam", "trick"], - "abilities": ["Serene Grace"] - } - ] - }, - "yanmega": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "protect"], - "abilities": ["Speed Boost"] - }, - { - "role": "Wallbreaker", - "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"], - "abilities": ["Tinted Lens"] - } - ] - }, - "leafeon": { - "level": 87, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["doubleedge", "knockoff", "leafblade", "substitute", "swordsdance", "synthesis"], - "abilities": ["Chlorophyll"], - "preferredTypes": ["Dark"] - } - ] - }, - "glaceon": { - "level": 91, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"], - "abilities": ["Ice Body"] - }, - { - "role": "Staller", - "movepool": ["icebeam", "protect", "toxic", "wish"], - "abilities": ["Ice Body"] - } - ] - }, - "gliscor": { - "level": 77, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "protect", "substitute", "toxic"], - "abilities": ["Poison Heal"] - }, - { - "role": "Staller", - "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "taunt", "toxic", "uturn"], - "abilities": ["Poison Heal"] - }, - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "facade", "roost", "swordsdance"], - "abilities": ["Poison Heal"] - } - ] - }, - "mamoswine": { - "level": 78, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["earthquake", "iceshard", "iciclecrash", "knockoff", "stealthrock"], - "abilities": ["Thick Fat"] - } - ] - }, - "porygonz": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["icebeam", "nastyplot", "shadowball", "thunderbolt", "triattack", "trick"], - "abilities": ["Adaptability", "Download"] - } - ] - }, - "gallade": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["closecombat", "icepunch", "knockoff", "shadowsneak", "swordsdance", "zenheadbutt", "machpunch"], - "abilities": ["Justified"], - "preferredTypes": ["Dark"] - } - ] - }, - "gallademega": { - "level": 77, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["sacredsword", "knockoff", "swordsdance", "psychocut"], - "abilities": ["Justified"] - } - ] - }, - "probopass": { - "level": 91, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthpower", "flashcannon", "stealthrock", "thunderwave", "toxic", "voltswitch"], - "abilities": ["Magnet Pull"] - }, - { - "role": "Bulky Support", - "movepool": ["earthpower", "powergem", "stealthrock", "thunderwave", "toxic", "voltswitch"], - "abilities": ["Magnet Pull"], - "preferredTypes": ["Ground"] - } - ] - }, - "dusknoir": { - "level": 89, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "painsplit", "shadowsneak", "toxic", "willowisp"], - "abilities": ["Frisk", "Pressure"], - "preferredTypes": ["Ground"] - }, - { - "role": "Bulky Support", - "movepool": ["earthquake", "icepunch", "painsplit", "toxic", "willowisp"], - "abilities": ["Frisk", "Pressure"], - "preferredTypes": ["Ground"] - }, - { - "role": "Staller", - "movepool": ["earthquake", "protect", "shadowsneak", "toxic"], - "abilities": ["Frisk", "Pressure"] - } - ] - }, - "froslass": { - "level": 84, - "sets": [ - { - "role": "Fast Support", - "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"], - "abilities": ["Cursed Body"] - } - ] - }, - "rotom": { - "level": 86, - "sets": [ - { - "role": "Fast Support", - "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"], - "abilities": ["Levitate"] - } - ] - }, - "rotomheat": { - "level": 82, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "voltswitch", "willowisp"], - "abilities": ["Levitate"] - } - ] - }, - "rotomwash": { - "level": 80, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["hydropump", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"], - "abilities": ["Levitate"] - } - ] - }, - "rotomfrost": { - "level": 86, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["blizzard", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"], - "abilities": ["Levitate"] - } - ] - }, - "rotomfan": { - "level": 84, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["airslash", "painsplit", "thunderbolt", "voltswitch", "willowisp"], - "abilities": ["Levitate"] - } - ] - }, - "rotommow": { - "level": 86, - "sets": [ - { - "role": "Fast Support", - "movepool": ["hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"], - "abilities": ["Levitate"] - } - ] - }, - "uxie": { - "level": 81, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["healbell", "knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn", "yawn"], - "abilities": ["Levitate"] - } - ] - }, - "mesprit": { - "level": 85, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "psychic", "psyshock", "signalbeam", "thunderbolt", "uturn"], - "abilities": ["Levitate"], - "preferredTypes": ["Bug"] - }, - { - "role": "Bulky Support", - "movepool": ["knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"], - "abilities": ["Levitate"] - } - ] - }, - "azelf": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["dazzlinggleam", "fireblast", "nastyplot", "psychic", "psyshock", "uturn"], - "abilities": ["Levitate"] - }, - { - "role": "Fast Support", - "movepool": ["explosion", "fireblast", "knockoff", "psychic", "stealthrock", "taunt", "uturn"], - "abilities": ["Levitate"] - } - ] - }, - "dialga": { - "level": 73, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["dracometeor", "dragontail", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"], - "abilities": ["Pressure"], - "preferredTypes": ["Fire"] - } - ] - }, - "palkia": { - "level": 73, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"], - "abilities": ["Pressure"], - "preferredTypes": ["Fire"] - } - ] - }, - "heatran": { - "level": 78, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthpower", "flashcannon", "lavaplume", "magmastorm", "stealthrock", "taunt", "toxic"], - "abilities": ["Flash Fire"] - }, - { - "role": "Staller", - "movepool": ["earthpower", "magmastorm", "protect", "toxic"], - "abilities": ["Flash Fire"] - } - ] - }, - "regigigas": { - "level": 84, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["drainpunch", "knockoff", "return", "thunderwave"], - "abilities": ["Slow Start"] - }, - { - "role": "Bulky Support", - "movepool": ["knockoff", "return", "substitute", "thunderwave"], - "abilities": ["Slow Start"] - } - ] - }, - "giratinaorigin": { - "level": 70, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["dracometeor", "hex", "shadowsneak", "thunderwave", "willowisp"], - "abilities": ["Levitate"] - }, - { - "role": "Fast Attacker", - "movepool": ["defog", "dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"], - "abilities": ["Levitate"] - } - ] - }, - "giratina": { - "level": 73, - "sets": [ - { - "role": "Fast Support", - "movepool": ["dragontail", "rest", "shadowball", "sleeptalk", "willowisp"], - "abilities": ["Pressure"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"], - "abilities": ["Pressure"] - }, - { - "role": "Bulky Support", - "movepool": ["defog", "dragontail", "rest", "shadowball", "willowisp"], - "abilities": ["Pressure"] - } - ] - }, - "cresselia": { - "level": 80, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "moonblast", "moonlight", "psyshock"], - "abilities": ["Levitate"] - }, - { - "role": "Bulky Support", - "movepool": ["moonblast", "moonlight", "psychic", "thunderwave", "toxic"], - "abilities": ["Levitate"] - } - ] - }, - "phione": { - "level": 90, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["healbell", "icebeam", "knockoff", "scald", "toxic", "uturn"], - "abilities": ["Hydration"] - } - ] - }, - "manaphy": { - "level": 76, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["energyball", "icebeam", "surf", "tailglow"], - "abilities": ["Hydration"] - } - ] - }, - "darkrai": { - "level": 72, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["darkpulse", "darkvoid", "nastyplot", "sludgebomb"], - "abilities": ["Bad Dreams"], - "preferredTypes": ["Poison"] - } - ] - }, - "shaymin": { - "level": 83, - "sets": [ - { - "role": "Fast Support", - "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"], - "abilities": ["Natural Cure"], - "preferredTypes": ["Flying"] - } - ] - }, - "shayminsky": { - "level": 73, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"], - "abilities": ["Serene Grace"] - } - ] - }, - "arceus": { - "level": 71, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"], - "abilities": ["Multitype"] - } - ] - }, - "arceusbug": { - "level": 71, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"], - "abilities": ["Multitype"] - }, - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment"], - "abilities": ["Multitype"] - } - ] - }, - "arceusdark": { - "level": 71, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "fireblast", "judgment", "recover", "sludgebomb", "toxic", "willowisp"], - "abilities": ["Multitype"] - } - ] - }, - "arceusdragon": { - "level": 71, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "willowisp"], - "abilities": ["Multitype"] - }, - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"], - "abilities": ["Multitype"], - "preferredTypes": ["Ground"] - } - ] - }, - "arceuselectric": { - "level": 71, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "icebeam", "judgment", "recover"], - "abilities": ["Multitype"] - } - ] - }, - "arceusfairy": { - "level": 71, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], - "abilities": ["Multitype"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover"], - "abilities": ["Multitype"] - } - ] - }, - "arceusfighting": { - "level": 71, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "icebeam", "judgment", "recover", "shadowball"], - "abilities": ["Multitype"] - } - ] - }, - "arceusfire": { - "level": 71, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "energyball", "judgment", "recover"], - "abilities": ["Multitype"] - } - ] - }, - "arceusflying": { - "level": 71, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover"], - "abilities": ["Multitype"] - }, - { - "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], - "abilities": ["Multitype"] - } - ] - }, - "arceusghost": { - "level": 71, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "defog", "focusblast", "judgment", "recover", "toxic", "willowisp"], - "abilities": ["Multitype"] - }, - { - "role": "Setup Sweeper", - "movepool": ["brickbreak", "extremespeed", "shadowforce", "swordsdance"], - "abilities": ["Multitype"] - } - ] - }, - "arceusgrass": { - "level": 71, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "fireblast", "judgment", "recover"], - "abilities": ["Multitype"] - }, - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "judgment"], - "abilities": ["Multitype"] - } - ] - }, - "arceusground": { - "level": 71, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"], - "abilities": ["Multitype"], - "preferredTypes": ["Rock"] - }, - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic"], - "abilities": ["Multitype"] - } - ] - }, - "arceusice": { - "level": 71, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"], - "abilities": ["Multitype"] - } - ] - }, - "arceuspoison": { - "level": 71, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "icebeam", "recover", "sludgebomb"], - "abilities": ["Multitype"], - "preferredTypes": ["Ground"] - }, - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"], - "abilities": ["Multitype"], - "preferredTypes": ["Ground"] - } - ] - }, - "arceuspsychic": { - "level": 71, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "toxic", "willowisp"], - "abilities": ["Multitype"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"], - "abilities": ["Multitype"] - } - ] - }, - "arceusrock": { - "level": 71, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], - "abilities": ["Multitype"] - }, - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"], - "abilities": ["Multitype"], - "preferredTypes": ["Ground"] - } - ] - }, - "arceussteel": { - "level": 71, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"], - "abilities": ["Multitype"] - } - ] - }, - "arceuswater": { - "level": 71, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic", "willowisp"], - "abilities": ["Multitype"] - } - ] - }, - "victini": { - "level": 77, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"], - "abilities": ["Victory Star"] - }, - { - "role": "AV Pivot", - "movepool": ["boltstrike", "energyball", "focusblast", "glaciate", "psychic", "uturn", "vcreate"], - "abilities": ["Victory Star"], - "preferredTypes": ["Electric"] - } - ] - }, - "serperior": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["dragonpulse", "glare", "hiddenpowerfire", "leafstorm", "leechseed", "substitute"], - "abilities": ["Contrary"] - } - ] - }, - "emboar": { - "level": 83, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["flareblitz", "headsmash", "suckerpunch", "superpower", "wildcharge"], - "abilities": ["Reckless"] - }, - { - "role": "AV Pivot", - "movepool": ["flareblitz", "grassknot", "suckerpunch", "superpower", "wildcharge"], - "abilities": ["Reckless"] - } - ] - }, - "samurott": { - "level": 87, - "sets": [ - { - "role": "AV Pivot", - "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "knockoff", "megahorn", "scald", "superpower"], - "abilities": ["Torrent"] - }, - { - "role": "Fast Attacker", - "movepool": ["aquajet", "knockoff", "megahorn", "superpower", "swordsdance", "waterfall"], - "abilities": ["Torrent"] - } - ] - }, - "watchog": { - "level": 94, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["hypnosis", "knockoff", "return", "superfang"], - "abilities": ["Analytic"] - }, - { - "role": "Setup Sweeper", - "movepool": ["hypnosis", "knockoff", "return", "substitute", "swordsdance"], - "abilities": ["Analytic"] - } - ] - }, - "stoutland": { - "level": 85, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["crunch", "facade", "return", "superpower"], - "abilities": ["Scrappy"] - } - ] - }, - "liepard": { - "level": 85, - "sets": [ - { - "role": "Fast Support", - "movepool": ["copycat", "encore", "knockoff", "substitute", "thunderwave", "uturn"], - "abilities": ["Prankster"] - } - ] - }, - "simisage": { - "level": 88, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["gunkshot", "hiddenpowerice", "knockoff", "leafstorm", "rockslide", "superpower"], - "abilities": ["Overgrow"], - "preferredTypes": ["Fighting"] - }, - { - "role": "Setup Sweeper", - "movepool": ["focusblast", "gigadrain", "hiddenpowerice", "nastyplot", "substitute"], - "abilities": ["Overgrow"] - } - ] - }, - "simisear": { - "level": 88, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"], - "abilities": ["Blaze"] - } - ] - }, - "simipour": { - "level": 86, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["grassknot", "hydropump", "icebeam", "nastyplot", "substitute"], - "abilities": ["Torrent"], - "preferredTypes": ["Ice"] - } - ] - }, - "musharna": { - "level": 88, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psyshock", "signalbeam"], - "abilities": ["Synchronize"] - }, - { - "role": "Bulky Support", - "movepool": ["healbell", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"], - "abilities": ["Synchronize"] - } - ] - }, - "unfezant": { - "level": 87, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["nightslash", "pluck", "return", "roost", "toxic", "uturn"], - "abilities": ["Super Luck"] - } - ] - }, - "zebstrika": { - "level": 87, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["hiddenpowerice", "overheat", "voltswitch", "wildcharge"], - "abilities": ["Sap Sipper"] - }, - { - "role": "Wallbreaker", - "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"], - "abilities": ["Lightning Rod"] - } - ] - }, - "gigalith": { - "level": 85, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower", "toxic"], - "abilities": ["Sturdy"], - "preferredTypes": ["Ground"] - } - ] - }, - "swoobat": { - "level": 87, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "heatwave", "roost", "storedpower"], - "abilities": ["Simple"] - }, - { - "role": "Setup Sweeper", - "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"], - "abilities": ["Simple"] - } - ] - }, - "excadrill": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"], - "abilities": ["Mold Breaker", "Sand Rush"] - } - ] - }, - "audino": { - "level": 90, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["knockoff", "protect", "toxic", "wish", "voltswitch"], - "abilities": ["Regenerator"] - } - ] - }, - "audinomega": { - "level": 82, - "sets": [ - { - "role": "Staller", - "movepool": ["icebeam", "protect", "voltswitch", "wish", "toxic"], - "abilities": ["Regenerator"] - }, - { - "role": "Bulky Support", - "movepool": ["thunderwave", "icebeam", "knockoff", "voltswitch", "toxic"], - "abilities": ["Regenerator"] - } - ] - }, - "conkeldurr": { - "level": 81, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["drainpunch", "facade", "knockoff", "machpunch"], - "abilities": ["Guts"] - }, - { - "role": "Setup Sweeper", - "movepool": ["bulkup", "drainpunch", "knockoff", "machpunch"], - "abilities": ["Iron Fist"] - } - ] - }, - "seismitoad": { - "level": 84, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "hydropump", "knockoff", "raindance", "sludgewave"], - "abilities": ["Swift Swim"] - }, - { - "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "scald", "stealthrock", "toxic"], - "abilities": ["Water Absorb"] - }, - { - "role": "Staller", - "movepool": ["earthquake", "protect", "scald", "toxic"], - "abilities": ["Water Absorb"] - } - ] - }, - "throh": { - "level": 88, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["bulkup", "circlethrow", "knockoff", "rest", "sleeptalk"], - "abilities": ["Guts"] - } - ] - }, - "sawk": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["bulkup", "closecombat", "earthquake", "knockoff", "poisonjab", "stoneedge"], - "abilities": ["Mold Breaker", "Sturdy"], - "preferredTypes": ["Dark"] - } - ] - }, - "leavanny": { - "level": 86, - "sets": [ - { - "role": "Fast Support", - "movepool": ["knockoff", "leafblade", "stickyweb", "toxic", "xscissor"], - "abilities": ["Chlorophyll", "Swarm"] - } - ] - }, - "scolipede": { - "level": 79, - "sets": [ - { - "role": "Fast Support", - "movepool": ["earthquake", "megahorn", "poisonjab", "spikes", "toxicspikes"], - "abilities": ["Speed Boost"] - }, - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "megahorn", "poisonjab", "swordsdance"], - "abilities": ["Speed Boost"] - } - ] - }, - "whimsicott": { - "level": 85, - "sets": [ - { - "role": "Fast Support", - "movepool": ["encore", "energyball", "moonblast", "stunspore", "taunt", "toxic", "uturn"], - "abilities": ["Prankster"] - }, - { - "role": "Staller", - "movepool": ["encore", "leechseed", "moonblast", "substitute"], - "abilities": ["Prankster"] - } - ] - }, - "lilligant": { - "level": 86, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "sleeppowder"], - "abilities": ["Chlorophyll"] - }, - { - "role": "Fast Attacker", - "movepool": ["hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"], - "abilities": ["Own Tempo"] - } - ] - }, - "basculin": { - "level": 86, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"], - "abilities": ["Adaptability"] - } - ] - }, - "krookodile": { - "level": 78, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["earthquake", "knockoff", "pursuit", "stealthrock", "stoneedge", "superpower"], - "abilities": ["Intimidate"] - } - ] - }, - "darmanitan": { - "level": 80, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"], - "abilities": ["Sheer Force"] - } - ] - }, - "maractus": { - "level": 98, - "sets": [ - { - "role": "Fast Support", - "movepool": ["gigadrain", "hiddenpowerfire", "knockoff", "spikes", "synthesis", "toxic"], - "abilities": ["Storm Drain", "Water Absorb"] - }, - { - "role": "Staller", - "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "spikyshield"], - "abilities": ["Storm Drain", "Water Absorb"] - } - ] - }, - "crustle": { - "level": 82, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "knockoff", "shellsmash", "stoneedge", "xscissor"], - "abilities": ["Sturdy"], - "preferredTypes": ["Ground"] - } - ] - }, - "scrafty": { - "level": 83, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["dragondance", "drainpunch", "ironhead", "knockoff"], - "abilities": ["Intimidate"] - }, - { - "role": "Bulky Setup", - "movepool": ["bulkup", "drainpunch", "knockoff", "rest"], - "abilities": ["Shed Skin"] - } - ] - }, - "sigilyph": { - "level": 83, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["airslash", "calmmind", "heatwave", "psyshock", "roost"], - "abilities": ["Magic Guard"] - }, - { - "role": "Wallbreaker", - "movepool": ["airslash", "energyball", "heatwave", "icebeam", "psychic", "psyshock"], - "abilities": ["Tinted Lens"], - "preferredTypes": ["Psychic"] - }, - { - "role": "Staller", - "movepool": ["cosmicpower", "psychoshift", "roost", "storedpower"], - "abilities": ["Magic Guard"] - } - ] - }, - "cofagrigus": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["haze", "painsplit", "shadowball", "toxicspikes", "willowisp"], - "abilities": ["Mummy"] - }, - { - "role": "Bulky Setup", - "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"], - "abilities": ["Mummy"] - } - ] - }, - "carracosta": { - "level": 87, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["aquajet", "earthquake", "icebeam", "shellsmash", "stoneedge", "waterfall"], - "abilities": ["Solid Rock", "Sturdy", "Swift Swim"] - } - ] - }, - "archeops": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["acrobatics", "defog", "earthquake", "knockoff", "roost", "stealthrock", "stoneedge", "uturn"], - "abilities": ["Defeatist"], - "preferredTypes": ["Ground"] - } - ] - }, - "garbodor": { - "level": 88, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["drainpunch", "gunkshot", "haze", "painsplit", "spikes", "toxic", "toxicspikes"], - "abilities": ["Aftermath"] - } - ] - }, - "zoroark": { - "level": 81, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "sludgebomb", "trick", "uturn"], - "abilities": ["Illusion"], - "preferredTypes": ["Poison"] - } - ] - }, - "cinccino": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["bulletseed", "knockoff", "rockblast", "tailslap", "uturn"], - "abilities": ["Skill Link"], - "preferredTypes": ["Grass"] - } - ] - }, - "gothitelle": { - "level": 89, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "shadowball", "signalbeam", "thunderbolt", "trick"], - "abilities": ["Shadow Tag"] - } - ] - }, - "reuniclus": { - "level": 85, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover"], - "abilities": ["Magic Guard"] - } - ] - }, - "swanna": { - "level": 85, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "roost", "scald", "toxic"], - "abilities": ["Hydration"] - } - ] - }, - "vanilluxe": { - "level": 88, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["autotomize", "explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam", "toxic"], - "abilities": ["Weak Armor"], - "preferredTypes": ["Ground"] - }, - { - "role": "AV Pivot", - "movepool": ["explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam"], - "abilities": ["Weak Armor"], - "preferredTypes": ["Ground"] - } - ] - }, - "sawsbuck": { - "level": 86, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["hornleech", "jumpkick", "return", "substitute", "swordsdance"], - "abilities": ["Sap Sipper"], - "preferredTypes": ["Normal"] - } - ] - }, - "emolga": { - "level": 88, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["acrobatics", "encore", "knockoff", "nuzzle", "roost", "thunderbolt", "toxic", "uturn"], - "abilities": ["Motor Drive"] - } - ] - }, - "escavalier": { - "level": 84, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["drillrun", "ironhead", "knockoff", "megahorn", "swordsdance"], - "abilities": ["Overcoat", "Swarm"] - } - ] - }, - "amoonguss": { - "level": 83, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["clearsmog", "foulplay", "gigadrain", "hiddenpowerground", "sludgebomb", "spore"], - "abilities": ["Regenerator"] - }, - { - "role": "Bulky Support", - "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"], - "abilities": ["Regenerator"] - } - ] - }, - "jellicent": { - "level": 85, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["icebeam", "recover", "scald", "shadowball", "taunt"], - "abilities": ["Water Absorb"] - }, - { - "role": "Bulky Support", - "movepool": ["hex", "recover", "scald", "toxic", "willowisp"], - "abilities": ["Water Absorb"] - } - ] - }, - "alomomola": { - "level": 85, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["knockoff", "protect", "scald", "toxic", "wish"], - "abilities": ["Regenerator"] - } - ] - }, - "galvantula": { - "level": 79, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["bugbuzz", "energyball", "stickyweb", "thunder", "voltswitch"], - "abilities": ["Compound Eyes"], - "preferredTypes": ["Bug"] - } - ] - }, - "ferrothorn": { - "level": 71, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"], - "abilities": ["Iron Barbs"] - }, - { - "role": "Bulky Support", - "movepool": ["knockoff", "powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"], - "abilities": ["Iron Barbs"] - } - ] - }, - "klinklang": { - "level": 87, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"], - "abilities": ["Clear Body"] - } - ] - }, - "eelektross": { - "level": 85, - "sets": [ - { - "role": "AV Pivot", - "movepool": ["discharge", "flamethrower", "gigadrain", "hiddenpowerice", "knockoff", "superpower", "uturn"], - "abilities": ["Levitate"] - } - ] - }, - "beheeyem": { - "level": 92, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["hiddenpowerfighting", "psychic", "psyshock", "recover", "signalbeam", "thunderbolt", "trick", "trickroom"], - "abilities": ["Analytic"], - "preferredTypes": ["Bug"] - } - ] - }, - "chandelure": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["energyball", "fireblast", "shadowball", "trick"], - "abilities": ["Flash Fire"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "energyball", "fireblast", "shadowball", "substitute"], - "abilities": ["Flame Body", "Flash Fire"] - } - ] - }, - "haxorus": { - "level": 77, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "outrage", "poisonjab", "taunt"], - "abilities": ["Mold Breaker"], - "preferredTypes": ["Ground"] - } - ] - }, - "beartic": { - "level": 94, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["aquajet", "iciclecrash", "stoneedge", "superpower", "swordsdance"], - "abilities": ["Swift Swim"], - "preferredTypes": ["Fighting"] - } - ] - }, - "cryogonal": { - "level": 89, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["freezedry", "haze", "hiddenpowerground", "rapidspin", "recover", "toxic"], - "abilities": ["Levitate"] - } - ] - }, - "accelgor": { - "level": 89, - "sets": [ - { - "role": "Fast Support", - "movepool": ["bugbuzz", "encore", "focusblast", "hiddenpowerground", "hiddenpowerrock", "spikes", "uturn"], - "abilities": ["Hydration", "Sticky Hold"] - } - ] - }, - "stunfisk": { - "level": 88, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["discharge", "earthpower", "scald", "stealthrock", "toxic"], - "abilities": ["Static"] - }, - { - "role": "Bulky Support", - "movepool": ["discharge", "earthpower", "protect", "rest", "sleeptalk", "toxic"], - "abilities": ["Static"] - } - ] - }, - "mienshao": { - "level": 81, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["highjumpkick", "knockoff", "poisonjab", "stoneedge", "swordsdance", "uturn"], - "abilities": ["Reckless"], - "preferredTypes": ["Dark"] - }, - { - "role": "AV Pivot", - "movepool": ["fakeout", "highjumpkick", "knockoff", "uturn"], - "abilities": ["Regenerator"] - } - ] - }, - "druddigon": { - "level": 86, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["firepunch", "glare", "gunkshot", "outrage", "suckerpunch"], - "abilities": ["Sheer Force"], - "preferredTypes": ["Poison"] - }, - { - "role": "Bulky Support", - "movepool": ["dragontail", "earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch"], - "abilities": ["Rough Skin"] - } - ] - }, - "golurk": { - "level": 83, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["dynamicpunch", "earthquake", "icepunch", "rockpolish", "stealthrock", "stoneedge"], - "abilities": ["No Guard"], - "preferredTypes": ["Fighting"] - } - ] - }, - "bisharp": { - "level": 79, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["ironhead", "knockoff", "pursuit", "suckerpunch", "swordsdance"], - "abilities": ["Defiant"] - } - ] - }, - "bouffalant": { - "level": 87, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"], - "abilities": ["Reckless", "Sap Sipper"] - } - ] - }, - "braviary": { - "level": 82, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bravebird", "bulkup", "roost", "superpower"], - "abilities": ["Defiant"] - }, - { - "role": "Fast Attacker", - "movepool": ["bravebird", "return", "superpower", "uturn"], - "abilities": ["Defiant"] - } - ] - }, - "mandibuzz": { - "level": 84, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bravebird", "defog", "foulplay", "knockoff", "roost", "taunt", "toxic", "uturn"], - "abilities": ["Overcoat"] - }, - { - "role": "Bulky Support", - "movepool": ["defog", "foulplay", "roost", "taunt", "toxic", "uturn"], - "abilities": ["Overcoat"] - } - ] - }, - "heatmor": { - "level": 92, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["fireblast", "gigadrain", "knockoff", "suckerpunch", "superpower"], - "abilities": ["Flash Fire"] - } - ] - }, - "durant": { - "level": 79, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"], - "abilities": ["Hustle"], - "preferredTypes": ["Fighting"] - } - ] - }, - "hydreigon": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["darkpulse", "dracometeor", "earthpower", "fireblast", "flashcannon", "roost", "uturn"], - "abilities": ["Levitate"] - }, - { - "role": "Bulky Attacker", - "movepool": ["darkpulse", "dracometeor", "fireblast", "roost", "toxic", "uturn"], - "abilities": ["Levitate"] - }, - { - "role": "AV Pivot", - "movepool": ["darkpulse", "dracometeor", "flashcannon", "superpower", "uturn"], - "abilities": ["Levitate"], - "preferredTypes": ["Fighting"] - } - ] - }, - "volcarona": { - "level": 77, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"], - "abilities": ["Flame Body", "Swarm"] - } - ] - }, - "cobalion": { - "level": 77, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "swordsdance"], - "abilities": ["Justified"] - } - ] - }, - "terrakion": { - "level": 77, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["closecombat", "earthquake", "quickattack", "stealthrock", "stoneedge", "swordsdance"], - "abilities": ["Justified"], - "preferredTypes": ["Ground"] - } - ] - }, - "virizion": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"], - "abilities": ["Justified"] - } - ] - }, - "tornadus": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"], - "abilities": ["Defiant", "Prankster"] - }, - { - "role": "Setup Sweeper", - "movepool": ["acrobatics", "bulkup", "knockoff", "superpower", "taunt"], - "abilities": ["Defiant"], - "preferredTypes": ["Fighting"] - } - ] - }, - "tornadustherian": { - "level": 78, - "sets": [ - { - "role": "Fast Support", - "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"], - "abilities": ["Regenerator"] - } - ] - }, - "thundurus": { - "level": 78, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"], - "abilities": ["Prankster"] - }, - { - "role": "Fast Attacker", - "movepool": ["hiddenpowerflying", "hiddenpowerice", "knockoff", "superpower", "taunt", "thunderbolt", "thunderwave"], - "abilities": ["Prankster"] - } - ] - }, - "thundurustherian": { - "level": 78, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"], - "abilities": ["Volt Absorb"] - } - ] - }, - "reshiram": { - "level": 73, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["blueflare", "dracometeor", "roost", "toxic"], - "abilities": ["Turboblaze"] - } - ] - }, - "zekrom": { - "level": 74, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"], - "abilities": ["Teravolt"] - }, - { - "role": "AV Pivot", - "movepool": ["boltstrike", "dracometeor", "outrage", "voltswitch"], - "abilities": ["Teravolt"] - } - ] - }, - "landorus": { - "level": 76, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["earthpower", "focusblast", "knockoff", "psychic", "rockpolish", "rockslide", "sludgewave", "stealthrock"], - "abilities": ["Sheer Force"], - "preferredTypes": ["Rock"] - }, - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "earthpower", "focusblast", "psychic", "rockpolish", "sludgewave"], - "abilities": ["Sheer Force"], - "preferredTypes": ["Poison"] - } - ] - }, - "landorustherian": { - "level": 76, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["earthquake", "knockoff", "stealthrock", "stoneedge", "toxic", "uturn"], - "abilities": ["Intimidate"] - }, - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "knockoff", "rockpolish", "stoneedge", "superpower", "swordsdance"], - "abilities": ["Intimidate"], - "preferredTypes": ["Rock"] - } - ] - }, - "kyurem": { - "level": 78, - "sets": [ - { - "role": "Staller", - "movepool": ["earthpower", "icebeam", "roost", "substitute"], - "abilities": ["Pressure"] - }, - { - "role": "Bulky Support", - "movepool": ["dracometeor", "earthpower", "icebeam", "outrage", "roost", "substitute"], - "abilities": ["Pressure"] - }, - { - "role": "Bulky Attacker", - "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage"], - "abilities": ["Pressure"] - } - ] - }, - "kyuremblack": { - "level": 76, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"], - "abilities": ["Teravolt"] - } - ] - }, - "kyuremwhite": { - "level": 74, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"], - "abilities": ["Turboblaze"] - } - ] - }, - "keldeo": { - "level": 79, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "scald", "secretsword"], - "abilities": ["Justified"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "scald", "secretsword", "substitute"], - "abilities": ["Justified"] - }, - { - "role": "Fast Attacker", - "movepool": ["focusblast", "hydropump", "scald", "secretsword"], - "abilities": ["Justified"] - } - ] - }, - "meloetta": { - "level": 82, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"], - "abilities": ["Serene Grace"] - }, - { - "role": "Wallbreaker", - "movepool": ["closecombat", "knockoff", "relicsong", "return"], - "abilities": ["Serene Grace"] - } - ] - }, - "genesect": { - "level": 72, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["blazekick", "ironhead", "shiftgear", "thunderbolt", "xscissor"], - "abilities": ["Download"] - }, - { - "role": "Wallbreaker", - "movepool": ["blazekick", "extremespeed", "ironhead", "uturn"], - "abilities": ["Download"] - }, - { - "role": "Fast Attacker", - "movepool": ["bugbuzz", "flamethrower", "flashcannon", "icebeam", "thunderbolt", "uturn"], - "abilities": ["Download"], - "preferredTypes": ["Bug"] - } - ] - }, - "chesnaught": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["bulkup", "drainpunch", "spikes", "synthesis", "toxic", "woodhammer"], - "abilities": ["Bulletproof"] - }, - { - "role": "Staller", - "movepool": ["drainpunch", "leechseed", "spikyshield", "woodhammer"], - "abilities": ["Bulletproof"] - } - ] - }, - "delphox": { - "level": 83, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["calmmind", "dazzlinggleam", "fireblast", "grassknot", "psyshock", "switcheroo"], - "abilities": ["Blaze"] - } - ] - }, - "greninja": { - "level": 79, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["grassknot", "gunkshot", "hydropump", "icebeam", "spikes", "taunt", "toxicspikes", "uturn"], - "abilities": ["Protean"], - "preferredTypes": ["Poison"] - } - ] - }, - "diggersby": { - "level": 81, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["agility", "earthquake", "knockoff", "quickattack", "return", "swordsdance"], - "abilities": ["Huge Power"], - "preferredTypes": ["Normal"] - }, - { - "role": "Fast Attacker", - "movepool": ["earthquake", "foulplay", "quickattack", "return", "uturn"], - "abilities": ["Huge Power"], - "preferredTypes": ["Normal"] - } - ] - }, - "talonflame": { - "level": 79, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bravebird", "overheat", "roost", "uturn", "willowisp"], - "abilities": ["Gale Wings"] - }, - { - "role": "Bulky Setup", - "movepool": ["bravebird", "flareblitz", "roost", "swordsdance"], - "abilities": ["Gale Wings"] - } - ] - }, - "vivillon": { - "level": 83, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["energyball", "hurricane", "quiverdance", "sleeppowder"], - "abilities": ["Compound Eyes"] - }, - { - "role": "Bulky Attacker", - "movepool": ["bugbuzz", "hurricane", "quiverdance", "sleeppowder"], - "abilities": ["Compound Eyes"] - } - ] - }, - "pyroar": { - "level": 86, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["fireblast", "hiddenpowergrass", "hypervoice", "solarbeam", "sunnyday", "willowisp", "workup"], - "abilities": ["Unnerve"], - "preferredTypes": ["Normal"] - } - ] - }, - "floetteeternal": { - "level": 81, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["hiddenpowerfire", "hiddenpowerground", "lightofruin", "moonblast", "psychic"], - "abilities": ["Flower Veil"] - } - ] - }, - "florges": { - "level": 84, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["aromatherapy", "moonblast", "synthesis", "toxic"], - "abilities": ["Flower Veil"] - }, - { - "role": "Staller", - "movepool": ["moonblast", "protect", "toxic", "wish"], - "abilities": ["Flower Veil"] - }, - { - "role": "Bulky Setup", - "movepool": ["calmmind", "hiddenpowerground", "moonblast", "synthesis"], - "abilities": ["Flower Veil"] - } - ] - }, - "gogoat": { - "level": 90, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["bulkup", "earthquake", "hornleech", "milkdrink", "toxic"], - "abilities": ["Sap Sipper"] - } - ] - }, - "pangoro": { - "level": 84, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["drainpunch", "gunkshot", "icepunch", "knockoff", "superpower"], - "abilities": ["Iron Fist"] - }, - { - "role": "Setup Sweeper", - "movepool": ["drainpunch", "gunkshot", "knockoff", "swordsdance"], - "abilities": ["Iron Fist"] - } - ] - }, - "furfrou": { - "level": 85, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["rest", "return", "thunderwave", "toxic", "uturn"], - "abilities": ["Fur Coat"] - }, - { - "role": "Staller", - "movepool": ["cottonguard", "rest", "return", "substitute", "toxic"], - "abilities": ["Fur Coat"] - } - ] - }, - "meowstic": { - "level": 86, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["healbell", "lightscreen", "psychic", "reflect", "signalbeam", "thunderwave", "toxic", "yawn"], - "abilities": ["Prankster"] - } - ] - }, - "meowsticf": { - "level": 90, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["calmmind", "darkpulse", "psychic", "psyshock", "signalbeam", "thunderbolt"], - "abilities": ["Competitive"], - "preferredTypes": ["Bug"] - } - ] - }, - "doublade": { - "level": 82, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"], - "abilities": ["No Guard"] - } - ] - }, - "aegislash": { - "level": 78, - "sets": [ - { - "role": "Staller", - "movepool": ["ironhead", "kingsshield", "shadowball", "substitute", "toxic"], - "abilities": ["Stance Change"] - }, - { - "role": "Setup Sweeper", - "movepool": ["ironhead", "kingsshield", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"], - "abilities": ["Stance Change"], - "preferredTypes": ["Steel"] - } - ] - }, - "aromatisse": { - "level": 89, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["calmmind", "moonblast", "protect", "toxic", "wish"], - "abilities": ["Aroma Veil"] - } - ] - }, - "slurpuff": { - "level": 77, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["bellydrum", "drainpunch", "playrough", "return"], - "abilities": ["Unburden"] - } - ] - }, - "malamar": { - "level": 81, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["knockoff", "rest", "sleeptalk", "superpower"], - "abilities": ["Contrary"] - }, - { - "role": "Fast Attacker", - "movepool": ["knockoff", "psychocut", "rest", "superpower"], - "abilities": ["Contrary"] - } - ] - }, - "barbaracle": { - "level": 82, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["earthquake", "lowkick", "razorshell", "shellsmash", "stoneedge"], - "abilities": ["Tough Claws"] - } - ] - }, - "dragalge": { - "level": 87, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["dracometeor", "dragontail", "focusblast", "sludgewave", "toxicspikes"], - "abilities": ["Adaptability"] - }, - { - "role": "Wallbreaker", - "movepool": ["dracometeor", "dragonpulse", "focusblast", "sludgewave"], - "abilities": ["Adaptability"] - } - ] - }, - "clawitzer": { - "level": 85, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn", "waterpulse"], - "abilities": ["Mega Launcher"] - }, - { - "role": "AV Pivot", - "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn"], - "abilities": ["Mega Launcher"] - } - ] - }, - "heliolisk": { - "level": 83, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["darkpulse", "glare", "hypervoice", "surf", "thunderbolt", "voltswitch"], - "abilities": ["Dry Skin"], - "preferredTypes": ["Normal"] - }, - { - "role": "Setup Sweeper", - "movepool": ["hypervoice", "raindance", "surf", "thunder"], - "abilities": ["Dry Skin"] - } - ] - }, - "tyrantrum": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["dragondance", "earthquake", "headsmash", "outrage", "superpower"], - "abilities": ["Rock Head"], - "preferredTypes": ["Ground"] - } - ] - }, - "aurorus": { - "level": 86, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["ancientpower", "blizzard", "earthpower", "freezedry", "haze", "stealthrock", "thunderwave"], - "abilities": ["Snow Warning"], - "preferredTypes": ["Ground"] - }, - { - "role": "Bulky Support", - "movepool": ["ancientpower", "earthpower", "freezedry", "haze", "hypervoice", "stealthrock", "thunderwave"], - "abilities": ["Refrigerate"], - "preferredTypes": ["Ground"] - } - ] - }, - "sylveon": { - "level": 84, - "sets": [ - { - "role": "Bulky Setup", - "movepool": ["calmmind", "hypervoice", "protect", "wish"], - "abilities": ["Pixilate"] - } - ] - }, - "hawlucha": { - "level": 77, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["acrobatics", "highjumpkick", "skyattack", "substitute", "swordsdance"], - "abilities": ["Unburden"] - } - ] - }, - "dedenne": { - "level": 89, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["protect", "recycle", "thunderbolt", "toxic"], - "abilities": ["Cheek Pouch"] - }, - { - "role": "Staller", - "movepool": ["recycle", "substitute", "superfang", "thunderbolt", "toxic", "uturn"], - "abilities": ["Cheek Pouch"] - } - ] - }, - "carbink": { - "level": 91, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["lightscreen", "moonblast", "powergem", "reflect", "stealthrock", "toxic"], - "abilities": ["Sturdy"] - } - ] - }, - "goodra": { - "level": 85, - "sets": [ - { - "role": "AV Pivot", - "movepool": ["dracometeor", "dragontail", "earthquake", "fireblast", "powerwhip", "sludgebomb"], - "abilities": ["Sap Sipper"] - } - ] - }, - "klefki": { - "level": 79, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["dazzlinggleam", "foulplay", "spikes", "thunderwave"], - "abilities": ["Prankster"] - }, - { - "role": "Bulky Attacker", - "movepool": ["magnetrise", "playrough", "spikes", "thunderwave"], - "abilities": ["Prankster"] - } - ] - }, - "trevenant": { - "level": 91, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["drainpunch", "earthquake", "hornleech", "rockslide", "shadowclaw", "trickroom", "woodhammer"], - "abilities": ["Natural Cure"] - }, - { - "role": "Staller", - "movepool": ["earthquake", "hornleech", "protect", "toxic"], - "abilities": ["Harvest"] - } - ] - }, - "gourgeistsmall": { - "level": 87, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], - "abilities": ["Frisk"] - } - ] - }, - "gourgeistlarge": { - "level": 87, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], - "abilities": ["Frisk"] - } - ] - }, - "gourgeist": { - "level": 87, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], - "abilities": ["Frisk"] - } - ] - }, - "gourgeistsuper": { - "level": 87, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"], - "abilities": ["Frisk"] - } - ] - }, - "avalugg": { - "level": 90, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["avalanche", "curse", "earthquake", "rapidspin", "recover"], - "abilities": ["Sturdy"] - } - ] - }, - "noivern": { - "level": 80, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["boomburst", "dracometeor", "flamethrower", "hurricane", "roost", "switcheroo", "uturn"], - "abilities": ["Infiltrator"] - } - ] - }, - "xerneas": { - "level": 64, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["focusblast", "geomancy", "moonblast", "psyshock"], - "abilities": ["Fairy Aura"] - } - ] - }, - "yveltal": { - "level": 69, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["knockoff", "oblivionwing", "roost", "suckerpunch", "taunt", "toxic", "uturn"], - "abilities": ["Dark Aura"] - } - ] - }, - "zygarde": { - "level": 77, - "sets": [ - { - "role": "Setup Sweeper", - "movepool": ["dragondance", "earthquake", "extremespeed", "glare", "outrage", "stoneedge", "substitute"], - "abilities": ["Aura Break"] - } - ] - }, - "diancie": { - "level": 81, - "sets": [ - { - "role": "Bulky Support", - "movepool": ["diamondstorm", "earthpower", "healbell", "moonblast", "stealthrock", "toxic"], - "abilities": ["Clear Body"] - } - ] - }, - "dianciemega": { - "level": 77, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["calmmind", "diamondstorm", "earthpower", "moonblast", "spikyshield"], - "abilities": ["Clear Body"], - "preferredTypes": ["Ground"] - } - ] - }, - "hoopa": { - "level": 84, - "sets": [ - { - "role": "Fast Attacker", - "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "shadowball", "trick"], - "abilities": ["Magician"] - } - ] - }, - "hoopaunbound": { - "level": 79, - "sets": [ - { - "role": "Wallbreaker", - "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "trick", "zenheadbutt"], - "abilities": ["Magician"], - "preferredTypes": ["Psychic"] - }, - { - "role": "Bulky Attacker", - "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "psychic", "trick"], - "abilities": ["Magician"], - "preferredTypes": ["Psychic"] - } - ] - }, - "volcanion": { - "level": 79, - "sets": [ - { - "role": "Bulky Attacker", - "movepool": ["earthpower", "fireblast", "sludgebomb", "steameruption", "superpower", "toxic"], - "abilities": ["Water Absorb"] - } - ] - } -} diff --git a/data/random-battles/gen6megasrevisited/teams.ts b/data/random-battles/gen6megasrevisited/teams.ts deleted file mode 100644 index e494fb7299..0000000000 --- a/data/random-battles/gen6megasrevisited/teams.ts +++ /dev/null @@ -1,7 +0,0 @@ -import RandomGen6Teams from '../gen6/teams'; - -export class RandomMRTeams extends RandomGen6Teams { - override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json'); -} - -export default RandomMRTeams; diff --git a/data/random-battles/gen7/sets.json b/data/random-battles/gen7/sets.json index 6f0d4b3593..87969a681d 100644 --- a/data/random-battles/gen7/sets.json +++ b/data/random-battles/gen7/sets.json @@ -455,7 +455,7 @@ ] }, "golduck": { - "level": 93, + "level": 92, "sets": [ { "role": "Bulky Setup", @@ -467,7 +467,7 @@ "role": "Fast Attacker", "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam"], "abilities": ["Cloud Nine", "Swift Swim"], - "preferredTypes": ["Ice"] + "preferredTypes": ["Ice"] } ] }, @@ -535,7 +535,7 @@ ] }, "alakazammega": { - "level": 78, + "level": 77, "sets": [ { "role": "Setup Sweeper", @@ -778,7 +778,7 @@ ] }, "kingler": { - "level": 87, + "level": 88, "sets": [ { "role": "Setup Sweeper", @@ -831,7 +831,7 @@ ] }, "marowak": { - "level": 88, + "level": 89, "sets": [ { "role": "Wallbreaker", @@ -1018,7 +1018,7 @@ ] }, "pinsir": { - "level": 84, + "level": 85, "sets": [ { "role": "Fast Attacker", @@ -1029,7 +1029,7 @@ ] }, "pinsirmega": { - "level": 74, + "level": 73, "sets": [ { "role": "Bulky Setup", @@ -1177,7 +1177,7 @@ ] }, "aerodactyl": { - "level": 82, + "level": 81, "sets": [ { "role": "Bulky Attacker", @@ -1608,7 +1608,7 @@ ] }, "wobbuffet": { - "level": 94, + "level": 95, "sets": [ { "role": "Bulky Support", @@ -2216,7 +2216,7 @@ ] }, "beautifly": { - "level": 99, + "level": 98, "sets": [ { "role": "Setup Sweeper", @@ -2410,7 +2410,7 @@ ] }, "shedinja": { - "level": 96, + "level": 97, "sets": [ { "role": "Setup Sweeper", @@ -2477,7 +2477,7 @@ ] }, "mawile": { - "level": 89, + "level": 90, "sets": [ { "role": "Bulky Attacker", @@ -2513,7 +2513,7 @@ ] }, "aggronmega": { - "level": 81, + "level": 80, "sets": [ { "role": "Bulky Attacker", @@ -2621,7 +2621,7 @@ ] }, "swalot": { - "level": 90, + "level": 91, "sets": [ { "role": "Bulky Attacker", @@ -2667,7 +2667,7 @@ ] }, "camerupt": { - "level": 90, + "level": 91, "sets": [ { "role": "Setup Sweeper", @@ -3001,7 +3001,7 @@ ] }, "absolmega": { - "level": 82, + "level": 81, "sets": [ { "role": "Setup Sweeper", @@ -3554,7 +3554,7 @@ ] }, "bastiodon": { - "level": 94, + "level": 93, "sets": [ { "role": "Bulky Support", @@ -4295,7 +4295,7 @@ ] }, "rotomfrost": { - "level": 86, + "level": 85, "sets": [ { "role": "Bulky Attacker", @@ -5635,7 +5635,7 @@ ] }, "bisharp": { - "level": 82, + "level": 81, "sets": [ { "role": "Fast Attacker", @@ -5858,7 +5858,7 @@ ] }, "zekrom": { - "level": 74, + "level": 75, "sets": [ { "role": "Setup Sweeper", @@ -5918,7 +5918,7 @@ ] }, "kyurem": { - "level": 80, + "level": 79, "sets": [ { "role": "Staller", @@ -6186,7 +6186,7 @@ ] }, "furfrou": { - "level": 86, + "level": 87, "sets": [ { "role": "Bulky Support", @@ -6339,7 +6339,7 @@ ] }, "tyrantrum": { - "level": 81, + "level": 80, "sets": [ { "role": "Fast Attacker", @@ -6741,7 +6741,7 @@ ] }, "oricoriopompom": { - "level": 87, + "level": 86, "sets": [ { "role": "Bulky Attacker", @@ -6965,7 +6965,7 @@ ] }, "comfey": { - "level": 87, + "level": 88, "sets": [ { "role": "Bulky Support", diff --git a/data/random-battles/gen7/teams.ts b/data/random-battles/gen7/teams.ts index e54572d390..e971a977d8 100644 --- a/data/random-battles/gen7/teams.ts +++ b/data/random-battles/gen7/teams.ts @@ -199,7 +199,7 @@ export class RandomGen7Teams extends RandomGen8Teams { if (move.priority > 0) counter.add('priority'); } // Moves with secondary effects: - if (move.secondary || move.hasSheerForce) { + if (move.secondary || move.hasSheerForceBoost) { counter.add('sheerforce'); if (sereneGraceBenefits(move)) { counter.add('serenegrace'); diff --git a/data/random-battles/gen8/data.json b/data/random-battles/gen8/data.json index 61aefbcef3..a62160318b 100644 --- a/data/random-battles/gen8/data.json +++ b/data/random-battles/gen8/data.json @@ -269,7 +269,7 @@ "doublesMoves": ["closecombat", "fakeout", "knockoff", "poisonjab", "protect", "rockslide"] }, "hitmonchan": { - "level": 88, + "level": 87, "moves": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "throatchop"], "doublesLevel": 88, "doublesMoves": ["coaching", "drainpunch", "feint", "firepunch", "icepunch", "machpunch"] @@ -319,7 +319,7 @@ "doublesMoves": ["dazzlinggleam", "fakeout", "icywind", "lightscreen", "psychic", "reflect"] }, "mrmimegalar": { - "level": 84, + "level": 83, "moves": ["focusblast", "freezedry", "nastyplot", "psychic", "rapidspin"] }, "scyther": { @@ -353,7 +353,7 @@ "doublesMoves": ["bounce", "dragondance", "icefang", "powerwhip", "protect", "waterfall"] }, "laprasgmax": { - "level": 85, + "level": 84, "moves": ["freezedry", "icebeam", "protect", "sparklingaria", "thunderbolt", "toxic"], "doublesLevel": 84, "doublesMoves": ["freezedry", "helpinghand", "hydropump", "icywind", "protect", "thunderbolt"] @@ -430,13 +430,13 @@ "doublesMoves": ["heatwave", "hurricane", "roost", "tailwind", "thunderbolt", "voltswitch"] }, "zapdosgalar": { - "level": 74, + "level": 73, "moves": ["bravebird", "bulkup", "closecombat", "throatchop", "uturn"], "doublesLevel": 76, "doublesMoves": ["bravebird", "bulkup", "closecombat", "throatchop", "thunderouskick", "uturn"] }, "moltres": { - "level": 79, + "level": 78, "moves": ["airslash", "defog", "fireblast", "roost", "uturn"], "doublesLevel": 81, "doublesMoves": ["bravebird", "fireblast", "heatwave", "protect", "roost", "tailwind"], @@ -457,7 +457,7 @@ "noDynamaxMoves": ["dragondance", "dualwingbeat", "earthquake", "outrage", "roost"] }, "mewtwo": { - "level": 71, + "level": 72, "moves": ["aurasphere", "fireblast", "nastyplot", "psystrike", "recover"], "doublesLevel": 74, "doublesMoves": ["aurasphere", "icebeam", "nastyplot", "psystrike", "recover"] @@ -531,7 +531,7 @@ "doublesMoves": ["calmmind", "dazzlinggleam", "morningsun", "protect", "psychic", "shadowball"] }, "umbreon": { - "level": 82, + "level": 81, "moves": ["foulplay", "protect", "toxic", "wish"], "doublesLevel": 88, "doublesMoves": ["foulplay", "helpinghand", "moonlight", "protect", "snarl", "toxic"] @@ -556,7 +556,7 @@ "noDynamaxMoves": ["counter", "destinybond", "encore", "mirrorcoat"] }, "dunsparce": { - "level": 90, + "level": 91, "moves": ["bodyslam", "coil", "earthquake", "roost"], "doublesLevel": 90, "doublesMoves": ["glare", "headbutt", "protect", "rockslide"] @@ -647,7 +647,7 @@ "doublesMoves": ["closecombat", "coaching", "fakeout", "helpinghand", "rapidspin", "suckerpunch", "tripleaxel"] }, "miltank": { - "level": 83, + "level": 82, "moves": ["bodyslam", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"], "doublesLevel": 86, "doublesMoves": ["bodypress", "bodyslam", "helpinghand", "icywind", "milkdrink", "protect", "rockslide"] @@ -659,7 +659,7 @@ "doublesMoves": ["allyswitch", "healpulse", "helpinghand", "protect", "seismictoss", "softboiled", "thunderwave", "toxic"] }, "raikou": { - "level": 79, + "level": 80, "moves": ["aurasphere", "calmmind", "scald", "substitute", "thunderbolt", "voltswitch"], "doublesLevel": 82, "doublesMoves": ["aurasphere", "calmmind", "protect", "scald", "snarl", "thunderbolt", "voltswitch"] @@ -739,7 +739,7 @@ "noDynamaxMoves": ["defog", "knockoff", "leafblade", "lowkick", "rockslide", "suckerpunch", "swordsdance"] }, "pelipper": { - "level": 87, + "level": 86, "moves": ["defog", "hurricane", "hydropump", "roost", "scald", "uturn"], "doublesLevel": 83, "doublesMoves": ["hurricane", "hydropump", "protect", "roost", "tailwind", "wideguard"] @@ -879,7 +879,7 @@ "doublesMoves": ["closecombat", "knockoff", "protect", "suckerpunch", "swordsdance"] }, "glalie": { - "level": 96, + "level": 95, "moves": ["earthquake", "freezedry", "spikes", "superfang", "taunt"], "doublesLevel": 94, "doublesMoves": ["disable", "foulplay", "freezedry", "helpinghand", "icywind", "protect"] @@ -971,7 +971,7 @@ "doublesMoves": ["playrough", "protect", "superpower", "voltswitch", "wildcharge"] }, "roserade": { - "level": 84, + "level": 83, "moves": ["leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"], "doublesLevel": 86, "doublesMoves": ["energyball", "leafstorm", "protect", "sleeppowder", "sludgebomb"] @@ -1005,7 +1005,7 @@ "doublesMoves": ["calmmind", "icywind", "shadowball", "strengthsap"] }, "lopunny": { - "level": 95, + "level": 96, "moves": ["closecombat", "facade", "healingwish", "switcheroo"], "doublesLevel": 92, "doublesMoves": ["closecombat", "fakeout", "switcheroo", "uturn"] @@ -1077,13 +1077,13 @@ "doublesMoves": ["bodypress", "electroweb", "flashcannon", "protect", "thunderbolt", "voltswitch"] }, "lickilicky": { - "level": 86, + "level": 87, "moves": ["bodyslam", "earthquake", "explosion", "healbell", "knockoff", "protect", "swordsdance", "wish"], "doublesLevel": 88, "doublesMoves": ["bodyslam", "explosion", "helpinghand", "icywind", "knockoff"] }, "rhyperior": { - "level": 79, + "level": 80, "moves": ["earthquake", "firepunch", "megahorn", "rockpolish", "stoneedge"], "doublesLevel": 84, "doublesMoves": ["highhorsepower", "icepunch", "megahorn", "protect", "rockslide", "stoneedge"] @@ -1095,7 +1095,7 @@ "doublesMoves": ["focusblast", "knockoff", "powerwhip", "ragepowder", "sleeppowder"] }, "electivire": { - "level": 83, + "level": 82, "moves": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"], "doublesLevel": 88, "doublesMoves": ["crosschop", "flamethrower", "icepunch", "stompingtantrum", "wildcharge"] @@ -1228,7 +1228,7 @@ "doublesMoves": ["earthpower", "eruption", "flashcannon", "heatwave", "protect"] }, "regigigas": { - "level": 82, + "level": 83, "moves": ["bodyslam", "protect", "substitute", "toxic"], "doublesLevel": 86, "doublesMoves": ["bodyslam", "knockoff", "protect", "thunderwave"] @@ -1265,7 +1265,7 @@ "doublesMoves": ["facade", "helpinghand", "superpower", "thunderwave"] }, "liepard": { - "level": 91, + "level": 92, "moves": ["copycat", "encore", "knockoff", "playrough", "thunderwave", "uturn"], "doublesLevel": 88, "doublesMoves": ["copycat", "encore", "fakeout", "foulplay", "snarl", "taunt", "thunderwave"] @@ -1388,7 +1388,7 @@ "doublesMoves": ["acupressure", "helpinghand", "leafstorm", "leechseed", "spikyshield"] }, "crustle": { - "level": 81, + "level": 82, "moves": ["earthquake", "shellsmash", "stoneedge", "xscissor"], "doublesLevel": 84, "doublesMoves": ["knockoff", "protect", "rockslide", "shellsmash", "xscissor"] @@ -1454,7 +1454,7 @@ "doublesMoves": ["focusblast", "protect", "psychic", "shadowball", "trickroom"] }, "vanilluxe": { - "level": 82, + "level": 81, "moves": ["auroraveil", "blizzard", "explosion", "flashcannon", "freezedry"], "doublesLevel": 82, "doublesMoves": ["auroraveil", "blizzard", "explosion", "freezedry", "protect"] @@ -1466,7 +1466,7 @@ "doublesMoves": ["acrobatics", "helpinghand", "nuzzle", "tailwind", "taunt", "voltswitch"] }, "escavalier": { - "level": 83, + "level": 82, "moves": ["closecombat", "drillrun", "ironhead", "knockoff", "megahorn", "swordsdance"], "doublesLevel": 86, "doublesMoves": ["closecombat", "drillrun", "ironhead", "knockoff", "megahorn", "protect", "swordsdance"] @@ -1478,7 +1478,7 @@ "doublesMoves": ["clearsmog", "pollenpuff", "protect", "ragepowder", "spore"] }, "jellicent": { - "level": 86, + "level": 87, "moves": ["icebeam", "recover", "scald", "shadowball", "toxic", "willowisp"], "doublesLevel": 84, "doublesMoves": ["scald", "shadowball", "strengthsap", "trickroom", "willowisp"] @@ -1539,7 +1539,7 @@ "noDynamaxMoves": ["bugbuzz", "encore", "energyball", "focusblast", "spikes", "toxic"] }, "stunfisk": { - "level": 83, + "level": 84, "moves": ["discharge", "earthpower", "foulplay", "sludgebomb", "stealthrock"], "doublesLevel": 88, "doublesMoves": ["earthpower", "electroweb", "foulplay", "stealthrock", "thunderbolt"] @@ -1563,7 +1563,7 @@ "doublesMoves": ["dragonclaw", "firepunch", "glare", "gunkshot", "protect", "suckerpunch"] }, "golurk": { - "level": 82, + "level": 83, "moves": ["dynamicpunch", "earthquake", "poltergeist", "rockpolish", "stoneedge"], "doublesLevel": 86, "doublesMoves": ["dynamicpunch", "highhorsepower", "icepunch", "poltergeist", "protect"] @@ -1813,7 +1813,7 @@ "doublesMoves": ["closecombat", "dragonclaw", "dragondance", "headsmash", "highhorsepower"] }, "aurorus": { - "level": 84, + "level": 85, "moves": ["ancientpower", "blizzard", "earthpower", "freezedry", "stealthrock", "thunderwave"], "doublesLevel": 88, "doublesMoves": ["auroraveil", "blizzard", "earthpower", "freezedry", "protect", "thunderwave"] @@ -1825,7 +1825,7 @@ "doublesMoves": ["calmmind", "hypervoice", "mysticalfire", "protect", "psyshock"] }, "hawlucha": { - "level": 78, + "level": 79, "moves": ["bravebird", "closecombat", "roost", "stoneedge", "swordsdance", "throatchop"], "doublesLevel": 80, "doublesMoves": ["bravebird", "closecombat", "protect", "swordsdance"] @@ -1867,7 +1867,7 @@ "doublesMoves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"] }, "gourgeistsmall": { - "level": 82, + "level": 83, "moves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"], "doublesLevel": 88, "doublesMoves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"] @@ -1897,7 +1897,7 @@ "doublesMoves": ["boomburst", "dracometeor", "flamethrower", "hurricane", "protect", "tailwind"] }, "xerneas": { - "level": 65, + "level": 64, "moves": ["focusblast", "geomancy", "moonblast", "psyshock"], "doublesLevel": 70, "doublesMoves": ["dazzlinggleam", "focusblast", "geomancy", "moonblast", "thunderbolt"] @@ -1946,7 +1946,7 @@ "doublesMoves": ["fakeout", "flareblitz", "knockoff", "partingshot", "uturn"] }, "primarina": { - "level": 80, + "level": 81, "moves": ["energyball", "hydropump", "moonblast", "psychic", "scald"], "doublesLevel": 82, "doublesMoves": ["dazzlinggleam", "flipturn", "hypervoice", "moonblast", "protect", "psychic"] @@ -2066,7 +2066,7 @@ "doublesMoves": ["hypnosis", "protect", "scorchingsands", "shadowball", "shoreup", "stealthrock"] }, "pyukumuku": { - "level": 86, + "level": 85, "moves": ["counter", "mirrorcoat", "recover", "toxic"], "doublesLevel": 100, "doublesMoves": ["helpinghand", "lightscreen", "memento", "reflect"] @@ -2214,7 +2214,7 @@ "doublesMoves": ["anchorshot", "knockoff", "powerwhip", "protect"] }, "kommoo": { - "level": 80, + "level": 81, "moves": ["clangingscales", "clangoroussoul", "closecombat", "poisonjab", "stealthrock"], "doublesLevel": 80, "doublesMoves": ["bodypress", "dracometeor", "irondefense", "protect"] @@ -2318,7 +2318,7 @@ "doublesMoves": ["heatwave", "moongeistbeam", "photongeyser", "protect", "thunderwave"] }, "magearna": { - "level": 73, + "level": 72, "moves": ["agility", "calmmind", "flashcannon", "fleurcannon"], "doublesLevel": 72, "doublesMoves": ["agility", "aurasphere", "dazzlinggleam", "flashcannon", "fleurcannon", "protect", "trick"] @@ -2355,7 +2355,7 @@ "doublesMoves": ["closecombat", "fakeout", "grassknot", "knockoff", "plasmafists", "snarl"] }, "melmetal": { - "level": 73, + "level": 72, "moves": ["doubleironbash", "earthquake", "superpower", "thunderpunch", "thunderwave"], "doublesLevel": 76, "doublesMoves": ["acidarmor", "bodypress", "doubleironbash", "protect", "thunderpunch", "thunderwave"] @@ -2480,7 +2480,7 @@ "doublesMoves": ["bravebird", "icebeam", "protect", "roost", "surf", "tailwind"] }, "barraskewda": { - "level": 80, + "level": 79, "moves": ["closecombat", "crunch", "flipturn", "liquidation"], "doublesLevel": 84, "doublesMoves": ["closecombat", "drillrun", "flipturn", "liquidation", "poisonjab"] @@ -2654,13 +2654,13 @@ "doublesMoves": ["blizzard", "boltbeak", "iciclecrash", "lowkick", "protect"] }, "dracovish": { - "level": 77, + "level": 78, "moves": ["crunch", "fishiousrend", "icefang", "lowkick", "psychicfangs"], "doublesLevel": 78, "doublesMoves": ["crunch", "dragonrush", "fishiousrend", "icefang", "psychicfangs"] }, "arctovish": { - "level": 87, + "level": 88, "moves": ["bodyslam", "fishiousrend", "freezedry", "iciclecrash", "psychicfangs"], "doublesLevel": 88, "doublesMoves": ["blizzard", "fishiousrend", "iciclecrash", "protect", "superfang"] @@ -2678,25 +2678,25 @@ "doublesMoves": ["dragondarts", "fireblast", "protect", "shadowball", "thunderbolt", "thunderwave"] }, "zacian": { - "level": 66, + "level": 67, "moves": ["closecombat", "crunch", "playrough", "psychicfangs", "swordsdance"], "doublesLevel": 72, "doublesMoves": ["closecombat", "crunch", "playrough", "protect", "psychicfangs", "swordsdance"] }, "zaciancrowned": { - "level": 61, + "level": 62, "moves": ["behemothblade", "closecombat", "playrough", "psychicfangs", "swordsdance"], "doublesLevel": 65, "doublesMoves": ["behemothblade", "closecombat", "playrough", "protect", "psychicfangs", "swordsdance"] }, "zamazenta": { - "level": 69, + "level": 70, "moves": ["closecombat", "crunch", "psychicfangs", "wildcharge"], "doublesLevel": 74, "doublesMoves": ["closecombat", "crunch", "playrough", "protect", "psychicfangs"] }, "zamazentacrowned": { - "level": 68, + "level": 67, "moves": ["behemothbash", "closecombat", "crunch", "howl", "psychicfangs"], "doublesLevel": 72, "doublesMoves": ["behemothbash", "closecombat", "crunch", "howl", "protect"] @@ -2734,7 +2734,7 @@ "doublesMoves": ["closecombat", "darkestlariat", "junglehealing", "powerwhip", "protect"] }, "regieleki": { - "level": 78, + "level": 77, "moves": ["explosion", "substitute", "thunderbolt", "voltswitch"], "doublesLevel": 82, "doublesMoves": ["electroweb", "extremespeed", "protect", "thundercage", "voltswitch"], @@ -2759,7 +2759,7 @@ "doublesMoves": ["darkpulse", "nastyplot", "protect", "shadowball"] }, "calyrex": { - "level": 88, + "level": 89, "moves": ["calmmind", "gigadrain", "leechseed", "psyshock", "substitute"], "doublesLevel": 94, "doublesMoves": ["helpinghand", "leafstorm", "pollenpuff", "protect"] diff --git a/data/random-battles/gen9/doubles-sets.json b/data/random-battles/gen9/doubles-sets.json index 8de6b658cf..946b35da98 100644 --- a/data/random-battles/gen9/doubles-sets.json +++ b/data/random-battles/gen9/doubles-sets.json @@ -1,6 +1,6 @@ { "venusaur": { - "level": 86, + "level": 87, "sets": [ { "role": "Offensive Protect", @@ -609,7 +609,7 @@ ] }, "weezinggalar": { - "level": 88, + "level": 89, "sets": [ { "role": "Doubles Bulky Attacker", @@ -907,7 +907,7 @@ "role": "Doubles Bulky Attacker", "movepool": ["Brave Bird", "Fire Blast", "Heat Wave", "Scorching Sands", "Tailwind"], "abilities": ["Flame Body"], - "teraTypes": ["Ground"] + "teraTypes": ["Ground"] } ] }, @@ -1674,7 +1674,7 @@ ] }, "shiftry": { - "level": 84, + "level": 83, "sets": [ { "role": "Doubles Wallbreaker", @@ -1702,7 +1702,7 @@ ] }, "gardevoir": { - "level": 83, + "level": 82, "sets": [ { "role": "Choice Item user", @@ -1736,7 +1736,7 @@ ] }, "breloom": { - "level": 84, + "level": 83, "sets": [ { "role": "Doubles Fast Attacker", @@ -1960,7 +1960,7 @@ ] }, "altaria": { - "level": 91, + "level": 90, "sets": [ { "role": "Doubles Bulky Attacker", @@ -2055,7 +2055,7 @@ ] }, "tropius": { - "level": 94, + "level": 93, "sets": [ { "role": "Doubles Support", @@ -2664,7 +2664,7 @@ ] }, "sneasler": { - "level": 77, + "level": 76, "sets": [ { "role": "Doubles Wallbreaker", @@ -3229,7 +3229,7 @@ ] }, "arceusdragon": { - "level": 73, + "level": 72, "sets": [ { "role": "Doubles Setup Sweeper", @@ -3313,7 +3313,7 @@ ] }, "arceusghost": { - "level": 72, + "level": 71, "sets": [ { "role": "Doubles Bulky Setup", @@ -4048,7 +4048,7 @@ ] }, "tornadustherian": { - "level": 77, + "level": 78, "sets": [ { "role": "Doubles Setup Sweeper", @@ -4292,7 +4292,7 @@ "abilities": ["Compound Eyes"], "teraTypes": ["Flying", "Steel"] }, - { + { "role": "Doubles Fast Attacker", "movepool": ["Hurricane", "Protect", "Sleep Powder", "Tailwind"], "abilities": ["Compound Eyes"], @@ -4401,7 +4401,7 @@ ] }, "sylveon": { - "level": 79, + "level": 78, "sets": [ { "role": "Bulky Protect", @@ -4663,7 +4663,7 @@ ] }, "gumshoos": { - "level": 93, + "level": 94, "sets": [ { "role": "Choice Item user", @@ -4781,7 +4781,7 @@ ] }, "lycanroc": { - "level": 85, + "level": 84, "sets": [ { "role": "Offensive Protect", @@ -4959,7 +4959,7 @@ ] }, "komala": { - "level": 92, + "level": 93, "sets": [ { "role": "Doubles Bulky Attacker", @@ -5775,7 +5775,7 @@ ] }, "calyrexshadow": { - "level": 63, + "level": 62, "sets": [ { "role": "Offensive Protect", @@ -5978,7 +5978,7 @@ "role": "Offensive Protect", "movepool": ["First Impression", "Knock Off", "Leech Life", "Protect"], "abilities": ["Tinted Lens"], - "teraTypes": ["Bug"] + "teraTypes": ["Bug"] } ] }, @@ -6141,7 +6141,7 @@ "abilities": ["Competitive"], "teraTypes": ["Flying", "Steel"] }, - { + { "role": "Doubles Wallbreaker", "movepool": ["Hurricane", "Protect", "Tailwind", "Thunderbolt"], "abilities": ["Competitive"], @@ -6358,7 +6358,7 @@ ] }, "orthworm": { - "level": 88, + "level": 89, "sets": [ { "role": "Bulky Protect", diff --git a/data/random-battles/gen9/sets.json b/data/random-battles/gen9/sets.json index b869ed198e..c4f31db372 100644 --- a/data/random-battles/gen9/sets.json +++ b/data/random-battles/gen9/sets.json @@ -3294,7 +3294,7 @@ ] }, "rotomwash": { - "level": 83, + "level": 82, "sets": [ { "role": "Bulky Attacker", @@ -3812,7 +3812,7 @@ ] }, "arceusice": { - "level": 73, + "level": 72, "sets": [ { "role": "Bulky Setup", @@ -4115,7 +4115,7 @@ ] }, "krookodile": { - "level": 80, + "level": 79, "sets": [ { "role": "Fast Attacker", @@ -4132,7 +4132,7 @@ ] }, "scrafty": { - "level": 84, + "level": 83, "sets": [ { "role": "Bulky Setup", @@ -5524,7 +5524,7 @@ ] }, "komala": { - "level": 89, + "level": 88, "sets": [ { "role": "Bulky Support", @@ -6488,7 +6488,7 @@ "role": "Bulky Attacker", "movepool": ["Aqua Step", "Close Combat", "Rapid Spin", "Roost", "Swords Dance"], "abilities": ["Moxie"], - "teraTypes": ["Steel"] + "teraTypes": ["Steel"] } ] }, @@ -7072,7 +7072,7 @@ ] }, "farigiraf": { - "level": 91, + "level": 90, "sets": [ { "role": "Bulky Support", @@ -7140,7 +7140,7 @@ ] }, "brutebonnet": { - "level": 81, + "level": 80, "sets": [ { "role": "Bulky Attacker", diff --git a/data/random-battles/gen9/teams.ts b/data/random-battles/gen9/teams.ts index 266f9b65ec..40f8986395 100644 --- a/data/random-battles/gen9/teams.ts +++ b/data/random-battles/gen9/teams.ts @@ -433,7 +433,7 @@ export class RandomTeams { } } // Moves with secondary effects: - if (move.secondary || move.hasSheerForce) { + if (move.secondary || move.hasSheerForceBoost) { counter.add('sheerforce'); if (sereneGraceBenefits(move)) { counter.add('serenegrace'); diff --git a/data/random-battles/gen9regeneration/random-sets.json b/data/random-battles/gen9regeneration/random-sets.json new file mode 100644 index 0000000000..65e38f561d --- /dev/null +++ b/data/random-battles/gen9regeneration/random-sets.json @@ -0,0 +1,1093 @@ +{ + "venusaur": { + "level": 84, + "sets": [ + { + "role": "Staller", + "movepool": ["gigadrain", "leechseed", "sleeppowder", "dazzlinggleam", "substitute"], + "abilities": ["Misty Surge"] + }, + { + "role": "Bulky Attacker", + "movepool": ["psychic", "energyball", "knockoff", "sleeppowder", "dazzlinggleam", "synthesis"], + "abilities": ["Misty Surge"] + } + ] + }, + "charizard": { + "level": 83, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["suckerpunch", "smokytorment", "earthquake", "flareblitz", "swordsdance"], + "abilities": ["Levitate"] + }, + { + "role": "Bulky Attacker", + "movepool": ["ceaselessedge", "flareblitz", "earthquake", "roost", "willowisp"], + "abilities": ["Levitate"] + } + ] + }, + "blastoise": { + "level": 84, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["hiddenpower", "rapidspin", "roar", "powerwash", "toxic", "thunderbolt", "thunderwave"], + "abilities": ["Motor Drive"], + "teraTypes": ["Ice"] + }, + { + "role": "Staller", + "movepool": ["haze", "hiddenpower", "protect", "powerwash", "scald", "toxic"], + "abilities": ["Motor Drive"], + "teraTypes": ["Ice"] + } + ] + }, + "butterfree": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["airslash", "powdergale", "quiverdance", "sleeppowder", "hiddenpower", "strengthsap"], + "abilities": ["Tinted Lens", "Multiscale"], + "teraTypes": ["Ice"] + } + ] + }, + "beedrill": { + "level": 85, + "sets": [ + { + "role": "Fast Support", + "movepool": ["stickyweb", "knockoff", "poisonjab", "toxicspikes", "uturn"], + "abilities": ["Speed Boost"] + }, + { + "role": "Setup Sweeper", + "movepool": ["swords dance", "knockoff", "poisonjab", "xscissor", "closecombat", "protect"], + "abilities": ["Speed Boost"] + } + ] + }, + "pidgeot": { + "level": 84, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["bravebird", "closecombat", "roost", "uturn"], + "abilities": ["wingsofvictory"] + } + ] + }, + "raticate": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["crunch", "facade", "gunkshot", "pestspread", "protect", "closecombat", "uturn"], + "abilities": ["Guts"] + }, + { + "role": "Fast Attacker", + "movepool": ["crunch", "doubleedge", "gunkshot", "pestspread", "closecombat", "uturn"], + "abilities": ["Hustle", "Poison Touch"] + } + ] + }, + "fearow": { + "level": 88, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"], + "abilities": ["Sniper"] + }, + { + "role": "Setup Sweeper", + "movepool": ["drillpeck", "drillrun", "focusenergy", "return"], + "abilities": ["Sniper"] + } + ] + }, + "arbok": { + "level": 90, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "suckerpunch", "trailblaze"], + "abilities": ["Intimidate"] + + }, + { + "role": "Bulky Setup", + "movepool": ["coil", "earthquake", "gunkshot", "rest"], + "abilities": ["Shed Skin"] + } + ] + }, + "pikachu": { + "level": 93, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["extremespeed", "grassknot", "hiddenpower", "knockoff", "surf", "voltswitch", "volttackle"], + "abilities": ["Lightning Rod"], + "teraTypes": ["Ice"] + } + ] + }, + "raichu": { + "level": 88, + "sets": [ + { + "role": "Fast Support", + "movepool": ["encore", "hiddenpower", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch", "alluringvoice"], + "abilities": ["Lightning Rod"], + "preferredTypes": ["Ice"], + "teraTypes": ["Ice"] + }, + { + "role": "Fast Attacker", + "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch", "alluringvoice"], + "abilities": ["Lightning Rod"], + "teraTypes": ["Ice"] + } + ] + }, + "sandslash": { + "level": 90, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"], + "abilities": ["Sand Rush"] + } + ] + }, + "nidoqueen": { + "level": 83, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "stealthrock", "toxicspikes"], + "abilities": ["Sheer Force"], + "preferredTypes": ["Ice"] + }, + { + "role": "Wallbreaker", + "movepool": ["earthpower", "poisonjab", "stealthrock", "toxicspikes", "moonlight"], + "abilities": ["Sheer Force", "Natural Cure", "Poison Point"], + "preferredTypes": ["Ice"] + } + ] + }, + "nidoking": { + "level": 82, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "substitute", "throatchop"], + "abilities": ["Sheer Force"], + "preferredTypes": ["Ice"] + }, + { + "role": "Fast Attacker", + "movepool": ["poisonjab", "earthquake", "headsmash", "superpower", "barbbarrage"], + "abilities": ["patriarch"] + } + ] + }, + "clefable": { + "level": 83, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"], + "abilities": ["Magic Guard", "Unaware"] + }, + { + "role": "Bulky Setup", + "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"], + "abilities": ["Magic Guard", "Unaware"] + } + ] + }, + "ninetales": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["fireblast", "hiddenpower", "nastyplot", "solarbeam"], + "abilities": ["Drought"], + "teraTypes": ["Ice"] + }, + { + "role": "Bulky Setup", + "movepool": ["fireblast", "nastyplot", "solarbeam", "substitute", "willowisp"], + "abilities": ["Drought"], + "preferredTypes": ["Grass"] + } + ] + }, + "wigglytuff": { + "level": 85, + "sets": [ + { + "role": "Fast Support", + "movepool": ["dazzlinggleam", "rapid spin", "healbell", "knockoff", "protect", "stealthrock", "thunderwave", "wish", "encore"], + "abilities": ["Ballooning"] + } + ] + }, + "vileplume": { + "level": 87, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["aromatherapy", "gigadrain", "hiddenpower", "sleeppowder", "sludgebomb", "strengthsap"], + "abilities": ["Effect Spore"], + "teraTypes": ["Ground"] + } + ] + }, + "parasect": { + "level": 99, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["aromatherapy", "knockoff", "leechlife", "seedbomb", "spore", "stunspore", "swordsdance"], + "abilities": ["Dry Skin"], + "preferredTypes": ["Bug"] + } + ] + }, + "venomoth": { + "level": 82, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb"], + "abilities": ["Tinted Lens"] + } + ] + }, + "dugtrio": { + "level": 84, + "sets": [ + { + "role": "Fast Support", + "movepool": ["earthquake", "honeclaws", "stealthrock", "stoneedge", "suckerpunch"], + "abilities": ["Arena Trap"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "earthquake", "stoneedge", "suckerpunch"], + "abilities": ["Arena Trap"] + } + ] + }, + "persian": { + "level": 93, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "knockoff", "return", "seedbomb", "uturn"], + "abilities": ["Limber"] + }, + { + "role": "Wallbreaker", + "movepool": ["doubleedge", "fakeout", "knockoff", "return", "uturn"], + "abilities": ["Technician"] + }, + { + "role": "Setup Sweeper", + "movepool": ["hiddenpower", "hypervoice", "nastyplot", "shadowball"], + "abilities": ["Technician"], + "teraTypes": ["Fighting"] + } + ] + }, + "golduck": { + "level": 93, + "sets": [ + { + "role": "Bulky Setup", + "movepool": ["calmmind", "encore", "focusblast", "icebeam", "scald", "substitute"], + "abilities": ["Cloud Nine", "Swift Swim"], + "preferredTypes": ["Ice"] + }, + { + "role": "Fast Attacker", + "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam"], + "abilities": ["Cloud Nine", "Swift Swim"], + "preferredTypes": ["Ice"] + } + ] + }, + "primeape": { + "level": 89, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["closecombat", "earthquake", "gunkshot", "stoneedge", "throatchop", "uturn"], + "abilities": ["Defiant"] + }, + { + "role": "Setup Sweeper", + "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "stoneedge", "throatchop"], + "abilities": ["Defiant"], + "preferredTypes": ["Rock"] + } + ] + }, + "arcanine": { + "level": 84, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"], + "abilities": ["Intimidate"] + }, + { + "role": "Fast Attacker", + "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "wildcharge"], + "abilities": ["Intimidate"], + "preferredTypes": ["Fighting"] + } + ] + }, + "poliwrath": { + "level": 88, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Close Combat", "Knock Off", "Liquidation", "Rain Dance"], + "abilities": ["Swift Swim"] + }, + { + "role": "AV Pivot", + "movepool": ["Circle Throw", "Close Combat", "Knock Off", "Liquidation"], + "abilities": ["Water Absorb"] + }, + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Ice Punch", "Knock Off", "Liquidation", "Poison Jab"], + "abilities": ["Water Absorb"] + } + ] + }, + "alakazam": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["dazzling gleam", "psychic", "psyshock", "shadowball"], + "abilities": ["Galaxy Brain", "Trace"] + }, + { + "role": "Setup Sweeper", + "movepool": ["calmmind", "encore", "dazzling gleam", "psychic", "psyshock", "brainwave", "shadowball", "substitute"], + "abilities": ["Galaxy Brain", "Trace"] + } + ] + }, + "machamp": { + "level": 84, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "knockoff", "stoneedge"], + "abilities": ["No Guard"], + "preferredTypes": ["Dark"] + }, + { + "role": "AV Pivot", + "movepool": ["bulletpunch", "dynamicpunch", "knockoff", "stoneedge"], + "abilities": ["No Guard"] + }, + { + "role": "Wallbreaker", + "movepool": ["bulletpunch", "closecombat", "facade", "knockoff"], + "abilities": ["Guts"], + "preferredTypes": ["Dark"] + } + ] + }, + "victreebel": { + "level": 90, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["poisonjab", "powerwhip", "suckerpunch", "swordsdance"], + "abilities": ["Chlorophyll"] + }, + { + "role": "Wallbreaker", + "movepool": ["hiddenpower", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "strengthsap", "suckerpunch"], + "abilities": ["Chlorophyll"], + "teraTypes": ["Ground"] + }, + { + "role": "Fast Attacker", + "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"], + "abilities": ["Chlorophyll"] + } + ] + }, + "tentacruel": { + "level": 83, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["haze", "knockoff", "rapidspin", "sludgebomb", "toxicspikes", "flip turn", "protect"], + "abilities": ["Tropical Current"] + } + ] + }, + "golem": { + "level": 86, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"], + "abilities": ["Sturdy"] + }, + { + "role": "Bulky Setup", + "movepool": ["earthquake", "explosion", "rockpolish", "stoneedge", "suckerpunch"], + "abilities": ["Sturdy"] + } + ] + }, + "rapidash": { + "level": 87, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["flareblitz", "highhorsepower", "morningsun", "wildcharge", "willowisp"], + "abilities": ["Flame Body", "Flash Fire"] + }, + { + "role": "Wallbreaker", + "movepool": ["flareblitz", "highhorsepower", "megahorn", "morningsun", "wildcharge"], + "abilities": ["Flash Fire"] + } + ] + }, + "slowbro": { + "level": 85, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["Calm Mind", "Psychic Noise", "Psyshock", "Scald", "Slack Off", "Thunder Wave"], + "abilities": ["Regenerator"] + }, + { + "role": "Bulky Support", + "movepool": ["Body Press", "Fire Blast", "Future Sight", "Ice Beam", "Psychic Noise", "Scald", "Teleport"], + "abilities": ["Regenerator"] + }, + { + "role": "Bulky Setup", + "movepool": ["Body Press", "Iron Defense", "Scald", "Slack Off"], + "abilities": ["Regenerator"] + } + ] + }, + "farfetchd": { + "level": 85, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["knockoff", "closecombat", "return", "swordsdance", "uturn"], + "abilities": ["Hustle", "Scrappy"] + } + ] + }, + "dodrio": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["bravebird", "highjumpkick", "knockoff", "earthquake", "swordsdance", "uturn"], + "abilities": ["ofafeather"], + "preferredTypes": ["Flying"] + } + ] + }, + "dewgong": { + "level": 96, + "sets": [ + { + "role": "Staller", + "movepool": ["icebeam", "protect", "surf", "toxic"], + "abilities": ["Thick Fat"] + }, + { + "role": "Bulky Support", + "movepool": ["encore", "icebeam", "surf", "toxic"], + "abilities": ["Thick Fat"] + } + ] + }, + "muk": { + "level": 88, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["brickbreak", "curse", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"], + "abilities": ["Poison Touch"], + "preferredTypes": ["Fighting"] + }, + { + "role": "AV Pivot", + "movepool": ["Drain Punch", "Gunk Shot", "Ice Punch", "Knock Off", "Poison Jab", "Shadow Sneak"], + "abilities": ["Poison Touch"] + } + + ] + }, + "cloyster": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["curse", "splashback", "bulletpunch", "iciclecrash", "drillrun"], + "abilities": ["Regenerator"] + }, + { + "role": "Bulky Support", + "movepool": ["splashback", "bulletpunch", "rapidspin", "toxic", "spikes", "toxicspikes", "teleport"], + "abilities": ["Regenerator"] + } + ] + }, + "gengar": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["shadowball", "icebeam", "illwind", "dazzlinggleam", "hiddenpower"], + "abilities": ["blackout"], + "teraTypes": ["Fighting"] + }, + { + "role": "Fast Support", + "movepool": ["willowisp", "thunderwave", "hex", "illwind", "encore", "taunt", "destinybond"], + "abilities": ["blackout"] + } + ] + }, + "hypno": { + "level": 97, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"], + "abilities": ["Insomnia"] + }, + { + "role": "Staller", + "movepool": ["protect", "seismictoss", "toxic", "wish"], + "abilities": ["Insomnia"] + } + ] + }, + "kingler": { + "level": 87, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["agility", "knockoff", "liquidation", "rockslide", "superpower", "swordsdance", "xscissor"], + "abilities": ["Sheer Force"] + } + ] + }, + "electrode": { + "level": 89, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["foulplay", "hiddenpower", "signalbeam", "taunt", "thunderbolt", "voltswitch"], + "abilities": ["Aftermath", "Static"], + "preferredTypes": ["Ice"], + "teraTypes": ["Ice"] + }, + { + "role": "Fast Support", + "movepool": ["hiddenpower", "lightscreen", "reflect", "thunderbolt", "thunderwave", "toxic", "voltswitch"], + "abilities": ["Aftermath", "Static"], + "teraTypes": ["Ice"] + } + ] + }, + "exeggutor": { + "level": 90, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Leech Seed", "Psychic", "Psychic Noise", "Sleep Powder", "Sludge Bomb", "Substitute"], + "abilities": ["Harvest"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Leech Seed", "Protect", "Psychic Noise", "Substitute"], + "abilities": ["Harvest"] + }, + { + "role": "Bulky Setup", + "movepool": ["Calm Mind", "Giga Drain", "Psychic", "Psyshock", "Sleep Powder", "hiddenpower", "Substitute"], + "abilities": ["Harvest"], + "teraTypes": ["Fighting"] + } + ] + }, + "marowak": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["earthquake", "knockoff", "closecombat", "swordsdance", "vengefulbone", "stealthrock", "stoneedge"], + "abilities": ["Justified"] + } + ] + }, + "hitmonlee": { + "level": 86, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["highjumpkick", "knockoff", "machpunch", "poisonjab", "rapidspin", "stoneedge"], + "abilities": ["Reckless"], + "preferredTypes": ["Dark"] + }, + { + "role": "Setup Sweeper", + "movepool": ["closecombat", "curse", "knockoff", "poisonjab", "stoneedge"], + "abilities": ["Unburden"], + "preferredTypes": ["Dark"] + } + ] + }, + "hitmonchan": { + "level": 87, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["Drain Punch", "Ice Punch", "Knock Off", "Mach Punch", "Rapid Spin", "Swords Dance"], + "abilities": ["Iron Fist"] + }, + { + "role": "Bulky Setup", + "movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Poison Jab", "Rapid Spin"], + "abilities": ["Iron Fist"] + }, + { + "role": "Bulky Support", + "movepool": ["Drain Punch", "Encore", "Knock Off", "Poison Jab", "Rapid Spin", "Taunt"], + "abilities": ["Iron Fist"] + } + ] + }, + "weezing": { + "level": 87, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"], + "abilities": ["Levitate"] + } + ] + }, + "rhydon": { + "level": 85, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"], + "abilities": ["Lightning Rod"] + } + ] + }, + "chansey": { + "level": 85, + "sets": [ + { + "role": "Staller", + "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"], + "abilities": ["Natural Cure"] + } + ] + }, + "kangaskhan": { + "level": 82, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["familyonslaught", "drainpunch", "earthquake", "u-turn", "suckerpunch", "dragonclaw"], + "abilities": ["Skill Link"] + }, + { + "role": "AV Pivot", + "movepool": ["familyonslaught", "drainpunch", "earthquake", "u-turn", "suckerpunch", "dragonclaw"], + "abilities": ["Skill Link"] + }, + { + "role": "Setup Sweeper", + "movepool": ["dragondance", "familyonslaught", "drainpunch", "earthquake", "dragonclaw"], + "abilities": ["Skill Link"] + } + ] + }, + "seaking": { + "level": 95, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "waterfall"], + "abilities": ["Lightning Rod"], + "preferredTypes": ["Dark"] + }, + { + "role": "Setup Sweeper", + "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "raindance", "waterfall"], + "abilities": ["Swift Swim"], + "preferredTypes": ["Dark"] + } + ] + }, + "starmie": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["hydropump", "icebeam", "psyshock", "flipturn", "thunderbolt"], + "abilities": ["Analytic", "Natural Cure"] + }, + { + "role": "Bulky Support", + "movepool": ["psyshock", "rapidspin", "recover", "scald", "flipturn", "thunderwave", "toxic"], + "abilities": ["Natural Cure"] + } + ] + }, + "mrmime": { + "level": 90, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "psychic", "psyshock", "shadowball", "thunderbolt"], + "abilities": ["Filter"], + "preferredTypes": ["Fighting"] + }, + { + "role": "Setup Sweeper", + "movepool": ["dazzlinggleam", "encore", "focusblast", "nastyplot", "psychic", "psyshock"], + "abilities": ["Filter"] + } + ] + }, + "scyther": { + "level": 82, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"], + "abilities": ["Technician"] + }, + { + "role": "Setup Sweeper", + "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"], + "abilities": ["Technician"] + } + ] + }, + "jynx": { + "level": 89, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"], + "abilities": ["Dry Skin"] + }, + { + "role": "Setup Sweeper", + "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"], + "abilities": ["Dry Skin"] + } + ] + }, + "pinsir": { + "level": 88, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "xscissor"], + "abilities": ["Moxie"], + "preferredTypes": ["Ground"] + } + ] + }, + "tauros": { + "level": 84, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["bodyslam", "headlongrush", "throatchop", "rockslide", "zenheadbutt", "escort"], + "abilities": ["Sheer Force"] + }, + { + "role": "Fast Attacker", + "movepool": ["doubleedge", "headlongrush", "stoneedge", "zenheadbutt", "escort"], + "abilities": ["Intimidate"] + } + ] + }, + "gyarados": { + "level": 82, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["dragondance", "crunch", "substitute", "liquidation"], + "abilities": ["Violent Abandon"] + } + ] + }, + "lapras": { + "level": 87, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["Freeze-Dry", "Hydro Pump", "Ice Beam", "Sparkling Aria", "escort"], + "abilities": ["Water Absorb"] + }, + { + "role": "Bulky Attacker", + "movepool": ["Freeze-Dry", "Wish", "Protect", "Sparkling Aria", "escort"], + "abilities": ["Water Absorb"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Dragon Dance", "Earthquake", "Icicle Spear", "Waterfall"], + "abilities": ["Water Absorb"] + } + ] + }, + "ditto": { + "level": 83, + "sets": [ + { + "role": "Fast Support", + "movepool": ["transform"], + "abilities": ["Imposter"] + } + ] + }, + "vaporeon": { + "level": 86, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["healbell", "icebeam", "protect", "scald", "wish", "slipwaway"], + "abilities": ["trace"] + }, + { + "role": "Wallbreaker", + "movepool": ["hydropump", "slipaway", "icebeam", "hiddenpower", "alluringvoice"], + "abilities": ["Protean"], + "teraTypes": ["Grass"] + } + ] + }, + "jolteon": { + "level": 81, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["hiddenpower", "shadowball", "thunderbolt", "voltswitch", "alluring voice"], + "abilities": ["Protean"], + "teraTypes": ["Ice"] + }, + { + "role": "Setup Sweeper", + "movepool": ["hiddenpower", "signalbeam", "thunderbolt", "voltswitch", "calmmind", "substitute"], + "abilities": ["Trace"], + "teraTypes": ["Ice"] + } + ] + }, + "flareon": { + "level": 88, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["superpower", "doubleedge", "suckerpunch", "flareblitz", "flareout"], + "abilities": ["Protean"] + } + ] + }, + "omastar": { + "level": 84, + "sets": [ + { + "role": "Setup Sweeper", + "movepool": ["hiddenpower", "hydropump", "icebeam", "shellsmash"], + "abilities": ["Shell Armor", "Swift Swim"], + "teraTypes": ["Grass"] + } + ] + }, + "kabutops": { + "level": 87, + "sets": [ + { + "role": "Fast Support", + "movepool": ["aquajet", "knockoff", "liquidation", "rapidspin", "stoneedge"], + "abilities": ["Battle Armor", "Swift Swim"] + }, + { + "role": "Setup Sweeper", + "movepool": ["aquajet", "knockoff", "liquidation", "stoneedge", "swordsdance"], + "abilities": ["Weak Armor"] + } + ] + }, + "aerodactyl": { + "level": 82, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"], + "abilities": ["Unnerve"] + }, + { + "role": "Fast Support", + "movepool": ["aerialace", "aquatail", "defog", "earthquake", "roost", "stealthrock", "stoneedge"], + "abilities": ["Unnerve"], + "preferredTypes": ["Ground"] + } + ] + }, + "snorlax": { + "level": 83, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "return", "sleeptalk"], + "abilities": ["Thick Fat"] + }, + { + "role": "Bulky Setup", + "movepool": ["bodyslam", "crunch", "curse", "earthquake", "recycle", "return"], + "abilities": ["Gluttony"] + } + ] + }, + "articuno": { + "level": 85, + "sets": [ + { + "role": "Staller", + "movepool": ["freezedry", "roost", "substitute", "toxic"], + "abilities": ["Pressure"] + }, + { + "role": "Bulky Support", + "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"], + "abilities": ["Pressure"] + } + ] + }, + "zapdos": { + "level": 79, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["defog", "discharge", "heatwave", "hiddenpower", "roost", "toxic", "uturn"], + "abilities": ["Static"], + "teraTypes": ["Ice"] + } + ] + }, + "moltres": { + "level": 82, + "sets": [ + { + "role": "Bulky Attacker", + "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"], + "abilities": ["Flame Body"] + } + ] + }, + "dragonite": { + "level": 84, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Earthquake", "icespinner", "extremespeed", "uturn"], + "abilities": ["Lifeguard"] + }, + { + "role": "Bulky Attacker", + "movepool": ["dracometeor", "hurricane", "fireblast", "roost" , "uturn", "thunderbolt"], + "abilities": ["Lifeguard"] + } + + ] + }, + "mewtwo": { + "level": 72, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"], + "abilities": ["Unnerve"] + } + ] + }, + "mew": { + "level": 80, + "sets": [ + { + "role": "Bulky Support", + "movepool": ["Encore", "Knock Off", "Psychic", "Psychic Noise", "Stealth Rock", "Toxic Spikes", "U-turn", "Will-O-Wisp", "roost"], + "abilities": ["Synchronize"] + }, + { + "role": "Setup Sweeper", + "movepool": ["Close Combat", "Knock Off", "Leech Life", "Psychic Fangs", "Swords Dance"], + "abilities": ["Synchronize"] + }, + { + "role": "Fast Bulky Setup", + "movepool": ["Aura Sphere", "Bug Buzz", "Dark Pulse", "Earth Power", "Fire Blast", "Hydro Pump", "Nasty Plot", "Psychic", "Psyshock"], + "abilities": ["Synchronize"] + } + ] + }, + "porygon": { + "level": 100, + "sets": [ + { + "role": "Wallbreaker", + "movepool": ["triattack", "shadowball", "hiddenpower", "hyperbeam", "trick"], + "abilities": ["Download"], + "teraTypes": ["Fighting"] + } + ] + }, + "magneton": { + "level": 89, + "sets": [ + { + "role": "Fast Attacker", + "movepool": ["Flash Cannon", "Thunderbolt", "Volt Switch", "hiddenpower"], + "abilities": ["Analytic", "Magnet Pull"], + "teraTypes": ["Ground"] + } + ] + } +} diff --git a/data/random-battles/gen9regeneration/teams.ts b/data/random-battles/gen9regeneration/teams.ts new file mode 100644 index 0000000000..fa44c2544f --- /dev/null +++ b/data/random-battles/gen9regeneration/teams.ts @@ -0,0 +1,1149 @@ +import { RandomTeams, type MoveCounter } from "../gen9/teams"; + +// Moves that restore HP: +const RECOVERY_MOVES = [ + 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis', +]; +// Moves that boost Attack: +const PHYSICAL_SETUP = [ + 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance', + 'filletaway', +]; +// Moves which boost Special Attack: +const SPECIAL_SETUP = [ + 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'takeheart', 'torchsong', 'filletaway', +]; +// Some moves that only boost Speed: +const SPEED_SETUP = [ + 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'trailblaze', +]; +// Conglomerate for ease of access +const SETUP = [ + 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance', + 'filletaway', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance', + 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'trickroom', 'workup', 'victorydance', +]; +const SPEED_CONTROL = [ + 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom', +]; +// Hazard-setting moves +const HAZARDS = [ + 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes', +]; +// Protect and its variants +const PROTECT_MOVES = [ + 'banefulbunker', 'burningbulwark', 'protect', 'silktrap', 'spikyshield', +]; +// Moves that switch the user out +const PIVOT_MOVES = [ + 'chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch', +]; + +// Moves that should be paired together when possible +const MOVE_PAIRS = [ + ['lightscreen', 'reflect'], + ['sleeptalk', 'rest'], + ['protect', 'wish'], + ['leechseed', 'protect'], + ['leechseed', 'substitute'], + ['leechseed', 'burningbulwark'], +]; + +/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */ +const PRIORITY_POKEMON = [ + 'breloom', 'brutebonnet', 'cacturne', 'honchkrow', 'mimikyu', 'ragingbolt', 'scizor', +]; + +/** Pokemon who should never be in the lead slot */ +const NO_LEAD_POKEMON = [ + 'Zacian', 'Zamazenta', +]; +const DOUBLES_NO_LEAD_POKEMON = [ + 'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta', +]; +export class RandomRGTeams extends RandomTeams { + override cullMovePool( + types: string[], + moves: Set, + abilities: string[], + counter: MoveCounter, + movePool: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ): void { + if (moves.size + movePool.length <= this.maxMoveCount) return; + // If we have two unfilled moves and only one unpaired move, cull the unpaired move. + if (moves.size === this.maxMoveCount - 2) { + const unpairedMoves = [...movePool]; + for (const pair of MOVE_PAIRS) { + if (movePool.includes(pair[0]) && movePool.includes(pair[1])) { + this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0])); + this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1])); + } + } + if (unpairedMoves.length === 1) { + this.fastPop(movePool, movePool.indexOf(unpairedMoves[0])); + } + } + + // These moves are paired, and shouldn't appear if there is not room for them both. + if (moves.size === this.maxMoveCount - 1) { + for (const pair of MOVE_PAIRS) { + if (movePool.includes(pair[0]) && movePool.includes(pair[1])) { + this.fastPop(movePool, movePool.indexOf(pair[0])); + this.fastPop(movePool, movePool.indexOf(pair[1])); + } + } + } + + // Develop additional move lists + const statusMoves = this.cachedStatusMoves; + + // Team-based move culls + if (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) { + if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect')); + if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.stickyWeb) { + if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.stealthRock) { + if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.defog || teamDetails.rapidSpin) { + if (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog')); + if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.toxicSpikes) { + if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.spikes && teamDetails.spikes >= 2) { + if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + if (teamDetails.statusCure) { + if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell')); + if (moves.size + movePool.length <= this.maxMoveCount) return; + } + + if (isDoubles) { + const doublesIncompatiblePairs = [ + // In order of decreasing generalizability + [SPEED_CONTROL, SPEED_CONTROL], + [HAZARDS, HAZARDS], + [PROTECT_MOVES, PROTECT_MOVES], + ['rockslide', 'stoneedge'], + [SETUP, ['fakeout', 'helpinghand']], + [PROTECT_MOVES, 'wideguard'], + [['fierydance', 'fireblast'], 'heatwave'], + ['dazzlinggleam', ['fleurcannon', 'moonblast']], + ['poisongas', ['toxicspikes', 'willowisp']], + [RECOVERY_MOVES, 'healpulse'], + ['lifedew', 'healpulse'], + ['haze', 'icywind'], + [['hydropump', 'muddywater'], ['muddywater', 'scald']], + ['disable', 'encore'], + ['freezedry', 'icebeam'], + ['energyball', 'leafstorm'], + ['wildcharge', 'thunderbolt'], + ['earthpower', 'sandsearstorm'], + ['coaching', ['helpinghand', 'howl']], + ]; + + for (const pair of doublesIncompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); + + if (role !== 'Offensive Protect') this.incompatibleMoves(moves, movePool, PROTECT_MOVES, ['flipturn', 'uturn']); + } + + // General incompatibilities + const incompatiblePairs = [ + // These moves don't mesh well with other aspects of the set + [statusMoves, ['healingwish', 'switcheroo', 'trick']], + [SETUP, PIVOT_MOVES], + [SETUP, HAZARDS], + [SETUP, ['defog', 'nuzzle', 'toxic', 'yawn', 'haze']], + [PHYSICAL_SETUP, PHYSICAL_SETUP], + [SPECIAL_SETUP, 'thunderwave'], + ['substitute', PIVOT_MOVES], + [SPEED_SETUP, ['aquajet', 'rest', 'trickroom']], + ['curse', ['irondefense', 'rapidspin']], + ['dragondance', 'dracometeor'], + + // These attacks are redundant with each other + ['surf', 'hydropump'], + ['liquidation', 'wavecrash'], + ['aquajet', 'flipturn'], + ['gigadrain', 'leafstorm'], + ['powerwhip', 'hornleech'], + [['airslash', 'bravebird', 'hurricane'], ['airslash', 'bravebird', 'hurricane']], + ['knockoff', 'foulplay'], + ['throatchop', ['crunch', 'lashout']], + ['doubleedge', ['bodyslam', 'headbutt']], + ['fireblast', ['fierydance', 'flamethrower']], + ['lavaplume', 'magmastorm'], + ['thunderpunch', 'wildcharge'], + [['thunderbolt', 'discharge', 'thunder'], ['thunderbolt', 'discharge', 'thunder']], + ['gunkshot', ['direclaw', 'poisonjab', 'sludgebomb']], + ['aurasphere', 'focusblast'], + ['closecombat', 'drainpunch'], + ['bugbite', 'pounce'], + [['dragonpulse', 'spacialrend'], 'dracometeor'], + ['heavyslam', 'flashcannon'], + ['alluringvoice', 'dazzlinggleam'], + + // These status moves are redundant with each other + ['taunt', 'disable'], + [['thunderwave', 'toxic'], ['thunderwave', 'willowisp']], + [['thunderwave', 'toxic', 'willowisp'], 'toxicspikes'], + ]; + + for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]); + + if (!types.includes('Ice')) this.incompatibleMoves(moves, movePool, 'icebeam', 'icywind'); + + if (!isDoubles) this.incompatibleMoves(moves, movePool, ['taunt', 'strengthsap'], 'encore'); + + if (!types.includes('Dark') && teraType !== 'Dark') this.incompatibleMoves(moves, movePool, 'knockoff', 'suckerpunch'); + + if (!abilities.includes('Prankster')) this.incompatibleMoves(moves, movePool, 'thunderwave', 'yawn'); + + // This space reserved for assorted hardcodes that otherwise make little sense out of context + } + + override randomMoveset( + types: string[], + abilities: string[], + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + movePool: string[], + teraType: string, + role: RandomTeamsTypes.Role, + ): Set { + const moves = new Set(); + let counter = this.queryMoves(moves, species, teraType, abilities); + this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role); + + // If there are only four moves, add all moves and return early + if (movePool.length <= this.maxMoveCount) { + for (const moveid of movePool) { + moves.add(moveid); + } + return moves; + } + + const runEnforcementChecker = (checkerName: string) => { + if (!this.moveEnforcementCheckers[checkerName]) return false; + return this.moveEnforcementCheckers[checkerName]( + movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role + ); + }; + + if (role === 'Tera Blast user') { + counter = this.addMove('terablast', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + // Add required move (e.g. Relic Song for Meloetta-P) + if (species.requiredMove) { + const move = this.dex.moves.get(species.requiredMove).id; + counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Add other moves you really want to have, e.g. STAB, recovery, setup. + + // PMCM hardcodes (reserve these to when absolutely necessary, let the script do most of the work) + // forces Splash on Chi-Yu's moveset, since it uses Z-Splash + if (species.id === 'chiyu') { + if (movePool.includes('splash')) { + counter = this.addMove('splash', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + // enforces both primary stabs on Infernape + if (species.id === 'infernape' && movePool.includes('mindblown')) { + counter = this.addMove('mindblown', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + counter = this.addMove('alloutassault', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce Facade if Guts is a possible ability + if (movePool.includes('facade') && abilities.includes('Guts')) { + counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce Night Shade, Revelation Dance, Revival Blessing, and Sticky Web + for (const moveid of ['nightshade', 'revelationdance', 'revivalblessing', 'stickyweb']) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Trick Room on Doubles Wallbreaker + if (movePool.includes('trickroom') && role === 'Doubles Wallbreaker') { + counter = this.addMove('trickroom', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce hazard removal on Bulky Support if the team doesn't already have it + if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) { + if (movePool.includes('rapidspin')) { + counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + if (movePool.includes('defog')) { + counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Knock Off on pure Normal- and Fighting-types in singles + if (!isDoubles && types.length === 1 && (types.includes('Normal') || types.includes('Fighting'))) { + if (movePool.includes('knockoff')) { + counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Flip Turn on pure Water-type Wallbreakers + if (types.length === 1 && types.includes('Water') && + role === 'Wallbreaker' && movePool.includes('flipturn')) { + counter = this.addMove('flipturn', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + + // Enforce Spore on Smeargle + if (species.id === 'smeargle') { + if (movePool.includes('spore')) { + counter = this.addMove('spore', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce moves in doubles + if (isDoubles) { + const doublesEnforcedMoves = ['auroraveil', 'mortalspin', 'spore']; + for (const moveid of doublesEnforcedMoves) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + // Enforce Fake Out on slow Pokemon + if (movePool.includes('fakeout') && species.baseStats.spe <= 50) { + counter = this.addMove('fakeout', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + // Enforce Tailwind on Prankster and Gale Wings users + if (movePool.includes('tailwind') && (abilities.includes('Prankster') || abilities.includes('Gale Wings'))) { + counter = this.addMove('tailwind', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + // Enforce Thunder Wave on Prankster users as well + if (movePool.includes('thunderwave') && abilities.includes('Prankster')) { + counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce STAB priority + if ( + ['Bulky Attacker', 'Bulky Setup', 'Wallbreaker', 'Doubles Wallbreaker'].includes(role) || + PRIORITY_POKEMON.includes(species.id) + ) { + const priorityMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if ( + types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) && + (move.basePower || move.basePowerCallback) + ) { + priorityMoves.push(moveid); + } + } + if (priorityMoves.length) { + const moveid = this.sample(priorityMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce a single STAB for Moltres + if (species.id === 'moltres') { + const typeToEnforce = this.randomChance(1, 2) ? 'Fire' : 'Flying'; + + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && typeToEnforce === moveType) { + stabMoves.push(moveid); + } + } + while (runEnforcementChecker(typeToEnforce)) { + if (!stabMoves.length) break; + const moveid = this.sampleNoReplace(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce STAB + for (const type of types) { + // Moltres already has STAB, so ignore this block + if (species.id === 'moltres') break; + // prevents Meowscarada from being enforced stab moves + if (species.id === 'meowscarada') break; + // Check if a STAB move of that type should be required + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) { + stabMoves.push(moveid); + } + } + while (runEnforcementChecker(type)) { + if (!stabMoves.length) break; + const moveid = this.sampleNoReplace(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce Tera STAB + // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care) + if (!counter.get('stabtera') && !['Bulky Support', 'Doubles Support'].includes(role) && + !abilities.includes('Protean')) { + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && teraType === moveType) { + stabMoves.push(moveid); + } + } + if (stabMoves.length) { + const moveid = this.sample(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // If no STAB move was added, add a STAB move + // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care) + if (!counter.get('stab') && !abilities.includes('Protean')) { + const stabMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) { + stabMoves.push(moveid); + } + } + if (stabMoves.length) { + const moveid = this.sample(stabMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce recovery + if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) { + const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid)); + if (recoveryMoves.length) { + const moveid = this.sample(recoveryMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce setup + if (role.includes('Setup') || role === 'Tera Blast user') { + // First, try to add a non-Speed setup move + const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid)); + if (nonSpeedSetupMoves.length) { + const moveid = this.sample(nonSpeedSetupMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } else { + // No non-Speed setup moves, so add any (Speed) setup move + const setupMoves = movePool.filter(moveid => SETUP.includes(moveid)); + if (setupMoves.length) { + const moveid = this.sample(setupMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + + // Enforce redirecting moves and Fake Out on Doubles Support + if (role === 'Doubles Support') { + for (const moveid of ['fakeout', 'followme', 'ragepowder']) { + if (movePool.includes(moveid)) { + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + + // Enforce Protect + if (role.includes('Protect')) { + const protectMoves = movePool.filter(moveid => PROTECT_MOVES.includes(moveid)); + if (protectMoves.length) { + const moveid = this.sample(protectMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce a move not on the noSTAB list + if (!counter.damagingMoves.size) { + // Choose an attacking move + const attackingMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid); + } + if (attackingMoves.length) { + const moveid = this.sample(attackingMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + + // Enforce coverage move + if (!['AV Pivot', 'Fast Support', 'Bulky Support', 'Bulky Protect', 'Doubles Support'].includes(role)) { + if (counter.damagingMoves.size === 1) { + // Find the type of the current attacking move + const currentAttackType = counter.damagingMoves.values().next().value!.type; + // Choose an attacking move that is of different type to the current single attack + const coverageMoves = []; + for (const moveid of movePool) { + const move = this.dex.moves.get(moveid); + const moveType = this.getMoveType(move, species, abilities, teraType); + if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) { + if (currentAttackType !== moveType) coverageMoves.push(moveid); + } + } + if (coverageMoves.length) { + const moveid = this.sample(coverageMoves); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + + // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves. + // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition. + + // Choose remaining moves randomly from movepool and add them to moves list: + while (moves.size < this.maxMoveCount && movePool.length) { + if (moves.size + movePool.length <= this.maxMoveCount) { + for (const moveid of movePool) { + moves.add(moveid); + } + break; + } + const moveid = this.sample(movePool); + counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + for (const pair of MOVE_PAIRS) { + if (moveid === pair[0] && movePool.includes(pair[1])) { + counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + if (moveid === pair[1] && movePool.includes(pair[0])) { + counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles, + movePool, teraType, role); + } + } + } + return moves; + } + + override getAbility( + types: string[], + moves: Set, + abilities: string[], + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ): string { + if (abilities.length <= 1) return abilities[0]; + + // Hard-code abilities here + if (species.id === 'drifblim') return moves.has('defog') ? 'Aftermath' : 'Unburden'; + // if (abilities.includes('Flash Fire') && this.dex.getEffectiveness('Fire', teraType) >= 1) return 'Flash Fire'; + if ((species.id === 'thundurus' || species.id === 'tornadus') && !counter.get('Physical')) return 'Prankster'; + if (species.id === 'swampert' && (counter.get('Water') || moves.has('flipturn'))) return 'Torrent'; + if (species.id === 'toucannon' && counter.get('skilllink')) return 'Skill Link'; + if (abilities.includes('Slush Rush') && moves.has('snowscape')) return 'Slush Rush'; + if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim'; + + const abilityAllowed: string[] = []; + // Obtain a list of abilities that are allowed (not culled) + for (const ability of abilities) { + if (!this.shouldCullAbility( + ability, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role + )) { + abilityAllowed.push(ability); + } + } + + // Pick a random allowed ability + if (abilityAllowed.length >= 1) return this.sample(abilityAllowed); + + // If all abilities are rejected, prioritize weather abilities over non-weather abilities + if (!abilityAllowed.length) { + const weatherAbilities = abilities.filter( + a => ['Chlorophyll', 'Hydration', 'Sand Force', 'Sand Rush', 'Slush Rush', 'Solar Power', 'Swift Swim'].includes(a) + ); + if (weatherAbilities.length) return this.sample(weatherAbilities); + } + + // Pick a random ability + return this.sample(abilities); + } + + override getPriorityItem( + ability: string, + types: string[], + moves: Set, + counter: MoveCounter, + teamDetails: RandomTeamsTypes.TeamDetails, + species: Species, + isLead: boolean, + isDoubles: boolean, + teraType: string, + role: RandomTeamsTypes.Role, + ) { + if (!isDoubles) { + if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) { + return 'Booster Energy'; + } + if (species.id === 'lokix') { + return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb'; + } + } + if (species.requiredItems) { + // Z-Crystals aren't available in Gen 9, so require Plates + if (species.baseSpecies === 'Arceus') { + return species.requiredItems[0]; + } + return this.sample(species.requiredItems); + } + if (species.id === 'pikachu') return 'Light Ball'; + if (role === 'AV Pivot') return 'Assault Vest'; + if (species.id === 'marowak') return 'Thick Club'; + if (ability === 'Tropical Current') return 'Flame Orb'; + if (ability === 'Blackout') return 'Heavy-Duty Boots'; + if (species.id === 'gyarados') return 'Sitrus Berry'; + if (species.id === 'regieleki') return 'Magnet'; + if (types.includes('Normal') && moves.has('doubleedge') && moves.has('fakeout')) return 'Silk Scarf'; + if ( + species.id === 'froslass' || moves.has('populationbomb') || + (ability === 'Hustle' && counter.get('setup') && !isDoubles && this.randomChance(1, 2)) + ) return 'Wide Lens'; + if (species.id === 'smeargle') return 'Focus Sash'; + if (moves.has('clangoroussoul') || (species.id === 'toxtricity' && moves.has('shiftgear'))) return 'Throat Spray'; + if ( + (species.baseSpecies === 'Magearna' && role === 'Tera Blast user') || + ((species.id === 'calyrexice' || species.id === 'necrozmaduskmane') && isDoubles) + ) return 'Weakness Policy'; + if (['dragonenergy', 'lastrespects', 'waterspout'].some(m => moves.has(m))) return 'Choice Scarf'; + if ( + !isDoubles && (ability === 'Imposter' || (species.id === 'magnezone' && role === 'Fast Attacker')) + ) return 'Choice Scarf'; + if (species.id === 'rampardos' && (role === 'Fast Attacker' || isDoubles)) return 'Choice Scarf'; + if (species.id === 'palkia' && counter.get('Status')) return 'Lustrous Orb'; + if ( + moves.has('courtchange') || + !isDoubles && (species.id === 'luvdisc' || (species.id === 'terapagos' && !moves.has('rest'))) + ) return 'Heavy-Duty Boots'; + if ( + ['Cheek Pouch', 'Cud Chew', 'Harvest', 'Ripen'].some(m => ability === m) || + moves.has('bellydrum') || moves.has('filletaway') + ) { + return 'Sitrus Berry'; + } + if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) { + if ( + species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && + role !== 'Wallbreaker' && role !== 'Doubles Wallbreaker' && !counter.get('priority') + ) { + return 'Choice Scarf'; + } else { + return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs'; + } + } + if (counter.get('Status') && (species.name === 'Latias' || species.name === 'Latios')) return 'Soul Dew'; + if (species.id === 'scyther' && !isDoubles) return (isLead && !moves.has('uturn')) ? 'Eviolite' : 'Heavy-Duty Boots'; + if (ability === 'Poison Heal' || ability === 'Quick Feet') return 'Toxic Orb'; + if (species.nfe) return 'Eviolite'; + if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) { + return (types.includes('Fire') || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb'; + } + if (ability === 'Magic Guard' || (ability === 'Sheer Force' && counter.get('sheerforce'))) return 'Life Orb'; + if (ability === 'Anger Shell') return this.sample(['Expert Belt', 'Lum Berry', 'Scope Lens', 'Sitrus Berry']); + if (moves.has('dragondance') && isDoubles) return 'Clear Amulet'; + if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice'; + if (ability === 'Unburden') { + return (moves.has('closecombat') || moves.has('leafstorm')) ? 'White Herb' : 'Sitrus Berry'; + } + if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb'; + if (moves.has('meteorbeam') || (moves.has('electroshot') && !teamDetails.rain)) return 'Power Herb'; + if (moves.has('acrobatics') && ability !== 'Protosynthesis') return ''; + if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay'; + if (ability === 'Gluttony') return `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`; + if (species.id === 'giratina' && !isDoubles && moves.has('rest') && !moves.has('sleeptalk')) return 'Leftovers'; + if ( + moves.has('rest') && !moves.has('sleeptalk') && + ability !== 'Natural Cure' && ability !== 'Shed Skin' + ) { + return 'Chesto Berry'; + } + if ( + species.id !== 'yanmega' && + this.dex.getEffectiveness('Rock', species) >= 2 && (!types.includes('Flying') || !isDoubles) + ) return 'Heavy-Duty Boots'; + } + + override randomSet( + s: string | Species, + teamDetails: RandomTeamsTypes.TeamDetails = {}, + isLead = false, + isDoubles = false + ): RandomTeamsTypes.RandomSet { + const species = this.dex.species.get(s); + const forme = this.getForme(species); + const sets = this.randomSets[species.id]["sets"]; + const possibleSets: RandomTeamsTypes.RandomSetData[] = []; + + const ruleTable = this.dex.formats.getRuleTable(this.format); + + for (const set of sets) { + // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy. + const abilities = set.abilities!; + if ( + isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) && + set.role === 'Fast Bulky Setup' + ) continue; + // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented. + if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') { + continue; + } + possibleSets.push(set); + } + const set = this.sampleIfArray(possibleSets); + const role = set.role; + const movePool: string[] = []; + for (const movename of set.movepool) { + movePool.push(this.dex.moves.get(movename).id); + } + const teraTypes = set.teraTypes!; + let teraType = this.sampleIfArray(teraTypes); + + let ability = ''; + let item = undefined; + + const evs = { hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85 }; + const ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 }; + + const types = species.types; + const abilities = set.abilities!; + + // Get moves + const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role); + const counter = this.queryMoves(moves, species, teraType, abilities); + + // Get ability + ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role); + + // Get items + // First, the priority items + item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role); + if (item === undefined) { + if (isDoubles) { + item = this.getDoublesItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role); + } else { + item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role); + } + } + + // Get level + const level = this.getLevel(species, isDoubles); + + // Prepare optimal HP + const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots'; + let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species); + // Crash damage move users want an odd HP to survive two misses + if (['axekick', 'highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2; + while (evs.hp > 1) { + const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item))) { + // Two Substitutes should activate Sitrus Berry + if (hp % 4 === 0) break; + } else if ((moves.has('bellydrum') || moves.has('filletaway')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) { + // Belly Drum should activate Sitrus Berry + if (hp % 2 === 0) break; + } else if (moves.has('substitute') && moves.has('endeavor')) { + // Luvdisc should be able to Substitute down to very low HP + if (hp % 4 > 0) break; + } else { + // Maximize number of Stealth Rock switch-ins + if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb'].includes(item)) break; + if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break; + // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry + if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break; + } + evs.hp -= 4; + } + + // Minimize confusion damage + const noAttackStatMoves = [...moves].every(m => { + const move = this.dex.moves.get(m); + if (move.damageCallback || move.damage) return true; + if (move.id === 'shellsidearm') return false; + // Magearna and doubles Dragonite, though these can work well as a general rule + if (move.id === 'terablast' && ( + species.id === 'porygon2' || moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa) + ) return false; + return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay'; + }); + // prevents Illumise (who can turn into Volbeat with Physical moves) from having 0 Atk EVs + if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' && + species.id !== 'illumise') { + evs.atk = 0; + ivs.atk = 0; + } + + if (moves.has('gyroball') || moves.has('trickroom')) { + evs.spe = 0; + ivs.spe = 0; + } + + // hidden power time + // Hidden Power Ice IVs + if ( + moves.has('hiddenpower') && + ( + species.id === 'ninetales' || species.id === 'electrode' || species.id === 'jolteon' || species.id === 'zapdos' || + species.id === 'blastoise' || species.id === 'butterfree' || species.id === 'pikachu' || species.id === 'raichu' + ) + ) { + ivs.atk = 0; + ivs.def = 30; + } + + // Hidden Power Ground IVs + if ( + moves.has('hiddenpower') && (species.id === 'vileplume' || species.id === 'magneton' || species.id === 'victreebel') + ) { + ivs.atk = 1; + ivs.spa = 30; + ivs.spd = 30; + } + + // Hidden Power Fighting IVs + if ( + moves.has('hiddenpower') && + (species.id === 'persian' || species.id === 'gengar' || species.id === 'exeggutor' || species.id === 'porygon') + ) { + ivs.atk = 1; + ivs.def = 30; + ivs.spa = 30; + ivs.spd = 30; + ivs.spe = 30; + } + + // Hidden Power Grass IVs + if ((species.id === 'vaporeon' || species.id === 'omastar') && moves.has('hiddenpower')) { + ivs.atk = 0; + ivs.spa = 30; + } + + // Enforce Tera Type after all set generation is done to prevent infinite generation + if (this.forceTeraType) teraType = this.forceTeraType; + + // shuffle moves to add more randomness to camomons + const shuffledMoves = Array.from(moves); + this.prng.shuffle(shuffledMoves); + return { + name: species.baseSpecies, + species: forme, + gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')), + shiny: this.randomChance(1, 1024), + level, + moves: shuffledMoves, + ability, + evs, + ivs, + item, + teraType, + role, + }; + } + + override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json'); + + randomRGTeam() { + this.enforceNoDirectCustomBanlistChanges(); + + const seed = this.prng.getSeed(); + const ruleTable = this.dex.formats.getRuleTable(this.format); + const pokemon: RandomTeamsTypes.RandomSet[] = []; + + // For Monotype + const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause'); + const isDoubles = this.format.gameType !== 'singles'; + const typePool = this.dex.types.names().filter(name => name !== "Stellar"); + const type = this.forceMonotype || this.sample(typePool); + + // PotD stuff + // const usePotD = global.Config && Config.potd && ruleTable.has('potd'); + // const potd = usePotD ? this.dex.species.get(Config.potd) : null; + + const baseFormes: { [k: string]: number } = {}; + let hasMega = false; + + const typeCount: { [k: string]: number } = {}; + const typeComboCount: { [k: string]: number } = {}; + const typeWeaknesses: { [k: string]: number } = {}; + const typeDoubleWeaknesses: { [k: string]: number } = {}; + const teamDetails: RandomTeamsTypes.TeamDetails = {}; + let numMaxLevelPokemon = 0; + + const pokemonList = Object.keys(this.randomSets); + const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList); + + let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1; + while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) { + const baseSpecies = this.sampleNoReplace(baseSpeciesPool); + if (hasMega && (baseSpecies === "Typhlosion" || baseSpecies === "Altaria" || baseSpecies === "Raticate")) continue; + const currentSpeciesPool: Species[] = []; + // Check if the base species has a mega forme available + // let canMega = false; + // for (const poke of pokemonPool[baseSpecies]) { + // const species = this.dex.species.get(poke); + // if (!hasMega && species.isMega) canMega = true; + // } + for (const poke of pokemonPool[baseSpecies]) { + const species = this.dex.species.get(poke); + // Prevent multiple megas + if (hasMega && species.isMega) continue; + // Prevent base forme, if a mega is available + // Added Abomasnow exception + // if (canMega && !species.isMega && species.id !== 'abomasnow') continue; + currentSpeciesPool.push(species); + } + // change const to let when enforcing certain mons for testing + const species = this.sample(currentSpeciesPool); + + // let species = this.dex.species.get(this.sample(pokemonPool[baseSpecies])); + + if (!species.exists) continue; + + // Limit to one of each species (Species Clause) + if (baseFormes[species.baseSpecies]) continue; + + // Limit one Mega per team + if (hasMega && species.isMega) continue; + + // Treat Ogerpon formes and Terapagos like the Tera Blast user role; reject if team has one already + if ((species.baseSpecies === 'Ogerpon' || species.baseSpecies === 'Terapagos') && teamDetails.teraBlast) continue; + + // Illusion shouldn't be on the last slot + if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue; + + const types = species.types; + const typeCombo = types.slice().sort().join(); + const weakToFreezeDry = ( + this.dex.getEffectiveness('Ice', species) > 0 || + (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water')) + ); + // Dynamically scale limits for different team sizes. The default and minimum value is 1. + const limitFactor = Math.round(this.maxTeamSize / 6) || 1; + + // TEMPORARILY ADJUSTING BALANCE OF THIS BLOCK -- TOO FEW POKEMON TO GENERATE TEAMS + // update: reverting these changes, but leaving just in case + if (!isMonotype && !this.forceMonotype) { + let skip = false; + + // Limit two of any type + // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED + for (const typeName of types) { + if (typeCount[typeName] >= 2 /* 6 */ * limitFactor) { + skip = true; + break; + } + } + if (skip) continue; + + // Limit three weak to any type, and one double weak to any type + // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED + for (const typeName of this.dex.types.names()) { + // it's weak to the type + if (this.dex.getEffectiveness(typeName, species) > 0) { + if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0; + if (typeWeaknesses[typeName] >= 3 /* 6 */ * limitFactor) { + skip = true; + break; + } + } + if (this.dex.getEffectiveness(typeName, species) > 1) { + if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0; + if (typeDoubleWeaknesses[typeName] >= 1 /* 6 */ * Number(limitFactor)) { + skip = true; + break; + } + } + } + if (skip) continue; + + // Count Dry Skin/Fluffy as Fire weaknesses + // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED + if ( + this.dex.getEffectiveness('Fire', species) === 0 && + Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length + ) { + if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0; + if (typeWeaknesses['Fire'] >= 3 /* 6 */ * limitFactor) continue; + } + + // Limit four weak to Freeze-Dry + // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED + if (weakToFreezeDry) { + if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0; + if (typeWeaknesses['Freeze-Dry'] >= 4 /* 6 */ * limitFactor) continue; + } + + // Limit one level 100 Pokemon + if (!this.adjustLevel && (this.getLevel(species, isDoubles) === 100) && numMaxLevelPokemon >= limitFactor) { + continue; + } + } + + // Limit three of any type combination in Monotype + if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue; + + // The Pokemon of the Day + // if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd; + + // testing code + // if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Raticate-Mega'); + + let set: RandomTeamsTypes.RandomSet; + + if (leadsRemaining) { + if ( + isDoubles && DOUBLES_NO_LEAD_POKEMON.includes(species.baseSpecies) || + !isDoubles && NO_LEAD_POKEMON.includes(species.baseSpecies) + ) { + if (pokemon.length + leadsRemaining === this.maxTeamSize) continue; + set = this.randomSet(species, teamDetails, false, isDoubles); + pokemon.push(set); + } else { + set = this.randomSet(species, teamDetails, true, isDoubles); + pokemon.unshift(set); + leadsRemaining--; + } + } else { + set = this.randomSet(species, teamDetails, false, isDoubles); + pokemon.push(set); + } + + const item = this.dex.items.get(set.item); + + // Don't bother tracking details for the last Pokemon + if (pokemon.length === this.maxTeamSize) break; + + // Now that our Pokemon has passed all checks, we can increment our counters + baseFormes[species.baseSpecies] = 1; + + // Increment type counters + for (const typeName of types) { + if (typeName in typeCount) { + typeCount[typeName]++; + } else { + typeCount[typeName] = 1; + } + } + if (typeCombo in typeComboCount) { + typeComboCount[typeCombo]++; + } else { + typeComboCount[typeCombo] = 1; + } + + // Increment weakness counter + for (const typeName of this.dex.types.names()) { + // it's weak to the type + if (this.dex.getEffectiveness(typeName, species) > 0) { + typeWeaknesses[typeName]++; + } + if (this.dex.getEffectiveness(typeName, species) > 1) { + typeDoubleWeaknesses[typeName]++; + } + } + // Count Dry Skin/Fluffy as Fire weaknesses + if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) { + typeWeaknesses['Fire']++; + } + if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++; + + // Increment level 100 counter + if (set.level === 100) numMaxLevelPokemon++; + + // Track what the team has + if (item.megaStone) hasMega = true; + if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1; + if (set.ability === 'Drought' || set.ability === 'Orichalcum Pulse' || set.moves.includes('sunnyday')) { + teamDetails.sun = 1; + } + if (set.ability === 'Sand Stream') teamDetails.sand = 1; + if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) { + teamDetails.snow = 1; + } + if (set.moves.includes('healbell')) teamDetails.statusCure = 1; + if (set.moves.includes('spikes') || set.moves.includes('ceaselessedge')) { + teamDetails.spikes = (teamDetails.spikes || 0) + 1; + } + if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 1; + if (set.moves.includes('stealthrock') || set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1; + if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1; + if (set.moves.includes('defog')) teamDetails.defog = 1; + if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1; + if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) { + teamDetails.screens = 1; + } + if (set.role === 'Tera Blast user' || species.baseSpecies === "Ogerpon" || species.baseSpecies === "Terapagos") { + teamDetails.teraBlast = 1; + } + } + if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built + throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`); + } + + return pokemon; + } +} + +export default RandomRGTeams; diff --git a/data/rulesets.ts b/data/rulesets.ts index 0bb49b3aac..22916b6a75 100644 --- a/data/rulesets.ts +++ b/data/rulesets.ts @@ -38,7 +38,7 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = { effectType: 'ValidatorRule', name: 'Flat Rules', desc: "The in-game Flat Rules: Adjust Level Down 50, Species Clause, Item Clause = 1, -Mythical, -Restricted Legendary, Bring 6 Pick 3-6 depending on game type.", - ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Beat Up Nicknames Mod', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'], + ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'], banlist: ['Mythical', 'Restricted Legendary', 'Greninja-Bond'], }, limittworestricted: { @@ -2518,12 +2518,13 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = { const item = pokemon.getItem(); if (/^tr\d\d/i.test(item.name)) { const move = this.dex.moves.get(item.desc.split('move ')[1].split('.')[0]); + const pp = this.calculatePP(move); pokemon.moveSlots = (pokemon as any).baseMoveSlots = [ ...pokemon.baseMoveSlots, { id: move.id, move: move.name, - pp: move.pp * 8 / 5, - maxpp: move.pp * 8 / 5, + pp, + maxpp: pp, target: move.target, disabled: false, disabledSource: '', @@ -2906,8 +2907,8 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = { if (num > 9 || num < 3 || num % 2 !== 1) { throw new Error("Series length must be an odd number between three and nine (inclusive)."); } - if (!['singles', 'doubles'].includes(this.format.gameType)) { - throw new Error("Only single and doubles battles can be a Best-of series."); + if (this.format.playerCount > 2) { + throw new Error("Free For All and Multi Battles cannot be a Best-of series."); } return value; }, diff --git a/data/text/abilities.ts b/data/text/abilities.ts index 49a91d02da..a5990e6191 100644 --- a/data/text/abilities.ts +++ b/data/text/abilities.ts @@ -379,6 +379,11 @@ export const AbilitiesText: { [id: IDEntry]: AbilityText } = { desc: "On switch-in, this Pokemon's Attack or Special Attack is raised by 1 stage based on the weaker combined defensive stat of all opposing Pokemon. Attack is raised if their Defense is lower, and Special Attack is raised if their Special Defense is the same or lower.", shortDesc: "On switch-in, Attack or Sp. Atk is raised 1 stage based on the foes' weaker Defense.", }, + dragonize: { + name: "Dragonize", + desc: "This Pokemon's Normal-type moves become Dragon-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.", + shortDesc: "This Pokemon's Normal-type moves become Dragon type and have 1.2x power.", + }, dragonsmaw: { name: "Dragon's Maw", shortDesc: "This Pokemon's offensive stat is multiplied by 1.5 while using a Dragon-type attack.", @@ -980,6 +985,10 @@ export const AbilitiesText: { [id: IDEntry]: AbilityText } = { desc: "This Pokemon's pulse moves have their power multiplied by 1.5. Heal Pulse restores 3/4 of a target's maximum HP, rounded half down.", shortDesc: "This Pokemon's pulse moves have 1.5x power. Heal Pulse heals 3/4 target's max HP.", }, + megasol: { + name: "Mega Sol", + shortDesc: "This Pokemon's moves are used as if the effects of Sunny Day were active.", + }, merciless: { name: "Merciless", shortDesc: "This Pokemon's attacks are critical hits if the target is poisoned.", @@ -1239,6 +1248,10 @@ export const AbilitiesText: { [id: IDEntry]: AbilityText } = { addItem: "#recycle", }, + piercingdrill: { + name: "Piercing Drill", + shortDesc: "This Pokemon's contact moves ignore a target's protection and deal 1/4 the usual damage.", + }, pixilate: { name: "Pixilate", desc: "This Pokemon's Normal-type moves become Fairy-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.", @@ -1755,6 +1768,10 @@ export const AbilitiesText: { [id: IDEntry]: AbilityText } = { desc: "This Pokemon's Speed is raised by 1 stage at the end of each full turn it has been on the field.", shortDesc: "This Pokemon's Speed is raised 1 stage at the end of each full turn on the field.", }, + spicyspray: { + name: "Spicy Spray", + shortDesc: "If this Pokemon is hit by an attack, the attacker becomes burned.", + }, stakeout: { name: "Stakeout", shortDesc: "This Pokemon's offensive stat is doubled against a target that switched in this turn.", diff --git a/server/chat-commands/admin.ts b/server/chat-commands/admin.ts index 2dea153104..9e5fdee50a 100644 --- a/server/chat-commands/admin.ts +++ b/server/chat-commands/admin.ts @@ -1627,126 +1627,7 @@ export const commands: Chat.ChatCommands = { throw new Chat.ErrorMessage("/editbattle - This is not a battle room."); } const battle = room.battle; - let cmd; - [cmd, target] = Utils.splitFirst(target, ' '); - if (cmd.endsWith(',')) cmd = cmd.slice(0, -1); - const targets = target.split(','); - if (targets.length === 1 && targets[0] === '') targets.pop(); - let player, pokemon, move, stat, value; - switch (cmd) { - case 'hp': - case 'h': - if (targets.length !== 3) { - this.errorReply("Incorrect command use"); - return this.parse('/help editbattle'); - } - [player, pokemon, value] = targets.map(f => f.trim()); - [player, pokemon] = [player, pokemon].map(toID); - void battle.stream.write( - `>eval let p=pokemon('${player}', '${pokemon}');p.sethp(${parseInt(value)});` + - `if (p.isActive)battle.add('-damage',p,p.getHealth);` - ); - break; - case 'status': - case 's': - if (targets.length !== 3) { - this.errorReply("Incorrect command use"); - return this.parse('/help editbattle'); - } - [player, pokemon, value] = targets.map(toID); - void battle.stream.write( - `>eval let pl=player('${player}');let p=pokemon(pl,'${pokemon}');p.setStatus('${value}');if (!p.isActive){battle.add('','please ignore the above');battle.add('-status',pl.active[0],pl.active[0].status,'[silent]');}` - ); - break; - case 'pp': - if (targets.length !== 4) { - this.errorReply("Incorrect command use"); - return this.parse('/help editbattle'); - } - [player, pokemon, move, value] = targets.map(f => f.trim()); - [player, pokemon, move] = [player, pokemon, move].map(toID); - void battle.stream.write( - `>eval pokemon('${player}','${pokemon}').getMoveData('${move}').pp = ${parseInt(value)};` - ); - break; - case 'boost': - case 'b': - if (targets.length !== 4) { - this.errorReply("Incorrect command use"); - return this.parse('/help editbattle'); - } - [player, pokemon, stat, value] = targets.map(f => f.trim()); - [player, pokemon, stat] = [player, pokemon, stat].map(toID); - void battle.stream.write( - `>eval let p=pokemon('${player}','${pokemon}');battle.boost({${stat}:${parseInt(value)}},p)` - ); - break; - case 'volatile': - case 'v': - if (targets.length !== 3) { - this.errorReply("Incorrect command use"); - return this.parse('/help editbattle'); - } - [player, pokemon, value] = targets.map(toID); - void battle.stream.write( - `>eval pokemon('${player}','${pokemon}').addVolatile('${value}')` - ); - break; - case 'sidecondition': - case 'sc': - if (targets.length !== 2) { - this.errorReply("Incorrect command use"); - return this.parse('/help editbattle'); - } - [player, value] = targets.map(toID); - void battle.stream.write(`>eval player('${player}').addSideCondition('${value}', 'debug')`); - break; - case 'fieldcondition': case 'pseudoweather': - case 'fc': - if (targets.length !== 1) { - this.errorReply("Incorrect command use"); - return this.parse('/help editbattle'); - } - [value] = targets.map(toID); - void battle.stream.write(`>eval battle.field.addPseudoWeather('${value}', 'debug')`); - break; - case 'weather': - case 'w': - if (targets.length !== 1) { - this.errorReply("Incorrect command use"); - return this.parse('/help editbattle'); - } - [value] = targets.map(toID); - void battle.stream.write(`>eval battle.field.setWeather('${value}', 'debug')`); - break; - case 'terrain': - case 't': - if (targets.length !== 1) { - this.errorReply("Incorrect command use"); - return this.parse('/help editbattle'); - } - [value] = targets.map(toID); - void battle.stream.write(`>eval battle.field.setTerrain('${value}', 'debug')`); - break; - case 'reseed': - if (targets.length !== 0) { - if (targets.length !== 4) { - this.errorReply("Seed must have 4 parts"); - return this.parse('/help editbattle'); - } - // this just tests for a 5-digit number, close enough to uint16 - if (!targets.every(val => /^[0-9]{1,5}$/.test(val))) { - this.errorReply("Seed parts much be unsigned 16-bit integers"); - return this.parse('/help editbattle'); - } - } - void battle.stream.write(`>reseed ${targets.join(',')}`); - if (targets.length) this.sendReply(`Reseeded to ${targets.join(',')}`); - break; - default: - this.errorReply(`Unknown editbattle command: ${cmd}`); - return this.parse('/help editbattle'); - } + void battle.stream.write(`>editbattle user:${user.name}, ${target}`); }, editbattlehelp: [ `/editbattle hp [player], [pokemon], [hp]`, diff --git a/server/chat-commands/avatars.tsx b/server/chat-commands/avatars.tsx index abc604f42a..83ac22c41f 100644 --- a/server/chat-commands/avatars.tsx +++ b/server/chat-commands/avatars.tsx @@ -740,7 +740,7 @@ export const commands: Chat.ChatCommands = { this.sendReply(`|raw|(${this.tr`Artist: `}Grapo)`); } if (OFFICIAL_AVATARS_FIFTY.has(avatar)) { - this.sendReply(`|raw|(${this.tr`Artist: `}Fifty Shades of Rez)`); + this.sendReply(`|raw|(${this.tr`Artist: `}Fifty Shades of Rez)`); } if (OFFICIAL_AVATARS_HORO.has(avatar)) { this.sendReply(`|raw|(${this.tr`Artist: `}Horo)`); diff --git a/server/chat-commands/core.ts b/server/chat-commands/core.ts index 2247792bd1..7c24e7367d 100644 --- a/server/chat-commands/core.ts +++ b/server/chat-commands/core.ts @@ -924,7 +924,9 @@ export const commands: Chat.ChatCommands = { } } - let resultString = Utils.escapeHTML(Teams.export(team, { hideStats })); + let resultString = Utils.escapeHTML(Teams.export(team, { + hideStats, useStatPoints: toID(battle.format).includes('champions'), + })); if (showAll) { resultString = `
${this.tr`View team`}${resultString}
`; } diff --git a/server/chat-commands/info.ts b/server/chat-commands/info.ts index 926174b18c..ffd8857c29 100644 --- a/server/chat-commands/info.ts +++ b/server/chat-commands/info.ts @@ -754,7 +754,9 @@ export const commands: Chat.ChatCommands = { const pastGensOnly = (move.isNonstandard === "Past" && dex.gen >= 8) || (move.isNonstandard === "Gigantamax" && dex.gen !== 8); if (pastGensOnly) details["✗ Past Gens Only"] = ""; - if (move.secondary || move.secondaries || move.hasSheerForce) details["✓ Boosted by Sheer Force"] = ""; + if (move.secondary || move.secondaries || move.hasSheerForceBoost) { + details["✓ Boosted by Sheer Force"] = ""; + } if (move.flags['contact'] && dex.gen >= 3) details["✓ Contact"] = ""; if (move.flags['sound'] && dex.gen >= 3) details["✓ Sound"] = ""; if (move.flags['bullet'] && dex.gen >= 6) details["✓ Bullet"] = ""; diff --git a/server/chat-plugins/datasearch.ts b/server/chat-plugins/datasearch.ts index 2526285def..140ef725c5 100644 --- a/server/chat-plugins/datasearch.ts +++ b/server/chat-plugins/datasearch.ts @@ -2118,7 +2118,7 @@ function runMovesearch(target: string, cmd: string, message: string, isTest: boo for (const flag in alts.flags) { if (flag === 'secondary') { - if (!(move.secondary || move.secondaries || move.hasSheerForce) === !alts.flags[flag]) { + if (!(move.secondary || move.secondaries || move.hasSheerForceBoost) === !alts.flags[flag]) { matched = true; break; } diff --git a/server/chat-plugins/github.ts b/server/chat-plugins/github.ts index e0dab37398..6953451e92 100644 --- a/server/chat-plugins/github.ts +++ b/server/chat-plugins/github.ts @@ -9,7 +9,7 @@ import { FS, Utils } from '../../lib'; const STAFF_REPOS = Config.staffrepos || [ 'pokemon-showdown', 'pokemon-showdown-client', 'Pokemon-Showdown-Dex', 'pokemon-showdown-loginserver', ]; -const COOLDOWN = 10 * 60 * 1000; +const COOLDOWN = 60 * 60 * 1000; export const gitData: GitData = JSON.parse(FS("config/chat-plugins/github.json").readIfExistsSync() || "{}"); diff --git a/server/chat-plugins/randombattles/ssb.tsx b/server/chat-plugins/randombattles/ssb.tsx index 10d2f329d3..ec309d5177 100644 --- a/server/chat-plugins/randombattles/ssb.tsx +++ b/server/chat-plugins/randombattles/ssb.tsx @@ -52,7 +52,9 @@ class SSBMoveHTML extends Chat.JSX.Component<{ sigMove: Move, dex: ModdedDex }> }; if (sigMove.isNonstandard === "Past" && dex.gen >= 8) details["Past Gens Only"] = "x"; - if (sigMove.secondary || sigMove.secondaries || sigMove.hasSheerForce) details["Boosted by Sheer Force"] = ""; + if (sigMove.secondary || sigMove.secondaries || sigMove.hasSheerForceBoost) { + details["Boosted by Sheer Force"] = ""; + } if (sigMove.flags['contact'] && dex.gen >= 3) details["Contact"] = ""; if (sigMove.flags['sound'] && dex.gen >= 3) details["Sound"] = ""; if (sigMove.flags['bullet'] && dex.gen >= 6) details["Bullet"] = ""; diff --git a/server/chat-plugins/uno.ts b/server/chat-plugins/uno.ts index 80e505007d..11e0df8eff 100644 --- a/server/chat-plugins/uno.ts +++ b/server/chat-plugins/uno.ts @@ -98,6 +98,7 @@ export class UNO extends Rooms.RoomGame { spectators: { [k: string]: number } = Object.create(null); isPlusFour = false; gameNumber: number; + lastColor: Color | null = null; constructor(room: Room, cap: number, suppressMessages: boolean) { super(room); @@ -157,6 +158,7 @@ export class UNO extends Rooms.RoomGame { this.topCard = this.drawCard(1)[0]; this.discards.unshift(this.topCard); } while (this.topCard.color === 'Black'); + this.lastColor = this.topCard.color; this.sendToRoom(`|raw|The top card is ${this.topCard.name}.`); @@ -213,12 +215,15 @@ export class UNO extends Rooms.RoomGame { const removingCurrentPlayer = player === this.currentPlayer; if (removingCurrentPlayer) { if (this.state === 'color') { - if (!this.topCard) { + if (!this.topCard || !this.lastColor) { // should never happen - throw new Error(`No top card in the discard pile.`); + throw new Error(`No top card in the discard pile or last color.`); } - this.topCard.changedColor = this.discards[1].changedColor || this.discards[1].color; - this.sendToRoom(`|raw|${Utils.escapeHTML(name)} has not picked a color, the color will stay as ${this.topCard.changedColor}.`); + this.topCard.changedColor = this.lastColor; + this.sendToRoom( + `|raw|${Utils.escapeHTML(name)} failed to pick a color. It will remain ` + + `${this.topCard.changedColor}.` + ); } } @@ -376,6 +381,7 @@ export class UNO extends Rooms.RoomGame { // update the game information. this.topCard = card; + if (card.color !== 'Black') this.lastColor = card.color; player.removeCard(cardName); this.discards.unshift(card); @@ -457,6 +463,7 @@ export class UNO extends Rooms.RoomGame { throw new Error(`No top card in the discard pile.`); } this.topCard.changedColor = color; + this.lastColor = color; this.sendToRoom(`|c:|${Math.floor(Date.now() / 1000)}|~|The color has been changed to ${color}.`); if (this.timer) clearTimeout(this.timer); @@ -691,7 +698,7 @@ export const commands: Chat.ChatCommands = { end(target, room, user) { room = this.requireRoom(); this.checkCan('minigame', null, room); - if (!room.game || room.game.gameid !== 'uno') { + if (room.game?.gameid !== 'uno') { throw new Chat.ErrorMessage("There is no UNO game going on in this room."); } room.game.destroy(); diff --git a/server/rooms.ts b/server/rooms.ts index f95481c634..3c38659b90 100644 --- a/server/rooms.ts +++ b/server/rooms.ts @@ -1497,6 +1497,7 @@ export class GlobalRoomState { // 32 was previously used for Multi Battles if (format.bestOfDefault) displayCode |= 64; if (format.teraPreviewDefault) displayCode |= 128; + if (format.itemClauseDefault) displayCode |= 256; this.formatList += ',' + displayCode.toString(16); } return this.formatList; diff --git a/sim/TEAMS.md b/sim/TEAMS.md index 857ae73f21..86a38e9b2c 100644 --- a/sim/TEAMS.md +++ b/sim/TEAMS.md @@ -186,7 +186,7 @@ NICKNAME|SPECIES|ITEM|ABILITY|MOVES|NATURE|EVS|GENDER|IVS|SHINY|LEVEL|HAPPINESS, HP, Atk, Def, SpA, SpD, Spe. EVs left blank are 0, IVs left blank are 31. If all EVs or IVs are blank, the commas can all be left off. -- `EVS` represent AVs in Pokémon Let's Go. +- `EVS` represent AVs in Pokémon Let's Go and Stat Points in Pokémon Champions. - `IVS` represent DVs in Gen 1-2. The IV will be divided by 2 and rounded down, to become DVs (so the default of 31 IVs is converted to 15 DVs). diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts index 8c8456a66e..911033d665 100644 --- a/sim/battle-actions.ts +++ b/sim/battle-actions.ts @@ -887,6 +887,7 @@ export class BattleActions { if (hit > 1 && pokemon.status === 'slp' && (!isSleepUsable || this.battle.gen === 4)) break; if (targets.every(target => !target?.hp)) break; move.hit = hit; + move.lastHit = move.hit === targetHits; if (move.smartTarget && targets.length > 1) { targetsCopy = [targets[hit - 1]]; damage = [damage[hit - 1]]; @@ -1137,12 +1138,17 @@ export class BattleActions { } const pokemonOriginalHP = pokemon.hp; if (damagedDamage.length && !isSecondary && !isSelf) { - this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage); - if (moveData.onAfterHit) { + if (this.battle.gen >= 5) { + this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage); + } + if (moveData.onAfterHit && pokemon.hp) { for (const t of damagedTargets) { this.battle.singleEvent('AfterHit', moveData, {}, t, pokemon, move); } } + if (this.battle.gen < 5) { + this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage); + } if (pokemon.hp && pokemon.hp <= pokemon.maxhp / 2 && pokemonOriginalHP > pokemon.maxhp / 2) { this.battle.runEvent('EmergencyExit', pokemon); } @@ -1823,8 +1829,12 @@ export class BattleActions { // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb. baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage); - if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) { + const bypassProtect = target.getMoveHitData(move).bypassProtect; + if (bypassProtect) { baseDamage = this.battle.modify(baseDamage, 0.25); + if (bypassProtect !== true && bypassProtect.effectType === 'Ability') { + this.battle.add('-ability', pokemon, bypassProtect.name); + } this.battle.add('-zbroken', target); } @@ -1872,13 +1882,12 @@ export class BattleActions { return altForme.name; } if (!item.megaStone) return null; - // Temporary hardcode until generation shift - if ((species.baseSpecies === "Floette" || species.baseSpecies === "Zygarde") && item.megaStone[species.name]) { - return item.megaStone[species.name]; - } + // TODO confirm with generation shift + let megaEvolution = item.megaStone[species.name]; + if (megaEvolution && this.dex.species.get(megaEvolution).gen >= 9) return megaEvolution; // a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X // FIXME: Change to species.name when champions comes - const megaEvolution = item.megaStone[species.baseSpecies]; + megaEvolution = item.megaStone[species.baseSpecies]; return megaEvolution && megaEvolution !== species.name ? megaEvolution : null; } @@ -1926,7 +1935,7 @@ export class BattleActions { terastallize(pokemon: Pokemon) { if (pokemon.species.baseSpecies === 'Ogerpon' && !['Fire', 'Grass', 'Rock', 'Water'].includes(pokemon.teraType) && (!pokemon.illusion || pokemon.illusion.species.baseSpecies === 'Ogerpon')) { - this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game softlocks.", false, pokemon.side); + this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game crashes.", false, pokemon.side); return; } diff --git a/sim/battle-stream.ts b/sim/battle-stream.ts index 67a5483c88..fda9a5b4dc 100644 --- a/sim/battle-stream.ts +++ b/sim/battle-stream.ts @@ -14,32 +14,6 @@ import { Teams } from './teams'; import { Battle, extractChannelMessages } from './battle'; import type { ChoiceRequest } from './side'; -/** - * Like string.split(delimiter), but only recognizes the first `limit` - * delimiters (default 1). - * - * `"1 2 3 4".split(" ", 2) => ["1", "2"]` - * - * `Utils.splitFirst("1 2 3 4", " ", 1) => ["1", "2 3 4"]` - * - * Returns an array of length exactly limit + 1. - */ -function splitFirst(str: string, delimiter: string, limit = 1) { - const splitStr: string[] = []; - while (splitStr.length < limit) { - const delimiterIndex = str.indexOf(delimiter); - if (delimiterIndex >= 0) { - splitStr.push(str.slice(0, delimiterIndex)); - str = str.slice(delimiterIndex + delimiter.length); - } else { - splitStr.push(str); - str = ''; - } - } - splitStr.push(str); - return splitStr; -} - export class BattleStream extends Streams.ObjectReadWriteStream { debug: boolean; noCatch: boolean; @@ -75,7 +49,7 @@ export class BattleStream extends Streams.ObjectReadWriteStream { _writeLines(chunk: string) { for (const line of chunk.split('\n')) { if (line.startsWith('>')) { - const [type, message] = splitFirst(line.slice(1), ' '); + const [type, message] = Utils.splitFirst(line.slice(1), ' '); this._writeLine(type, message); } } @@ -110,7 +84,7 @@ export class BattleStream extends Streams.ObjectReadWriteStream { this.battle = new Battle(options); break; case 'player': - const [slot, optionsText] = splitFirst(message, ' '); + const [slot, optionsText] = Utils.splitFirst(message, ' '); this.battle!.setPlayer(slot as SideID, JSON.parse(optionsText)); break; case 'p1': @@ -208,6 +182,14 @@ export class BattleStream extends Streams.ObjectReadWriteStream { battle.add('', '<<< error: ' + e.message); } break; + case 'editbattle': + try { + this.editbattle(message); + this.battle!.inputLog.push(`>editbattle ${message}`); + } catch (e: any) { + this.battle!.add('', '<<< error: ' + e.message); + } + break; case 'requestlog': this.push(`requesteddata\n${this.battle!.inputLog.join('\n')}`); break; @@ -234,6 +216,167 @@ export class BattleStream extends Streams.ObjectReadWriteStream { throw new Error(`Unrecognized command ">${type} ${message}"`); } } + editbattle(target: string) { + const battle = this.battle!; + const toID = battle.toID; + const getPlayer = (originalInput: string) => { + const input = toID(originalInput); + if (/^p[1-9]$/.test(input)) return battle.sides[parseInt(input.slice(1)) - 1]; + if (/^[1-9]$/.test(input)) return battle.sides[parseInt(input) - 1]; + for (const side of battle.sides) { + if (toID(side.name) === input) return side; + } + throw new Error(`Player "${originalInput}" not found`); + }; + const getPokemon = (side: string | Side, input: string) => { + if (typeof side === 'string') side = getPlayer(side)!; + + input = toID(input); + let out = null; + if (/^[1-9]$/.test(input)) out = side.pokemon[parseInt(input) - 1]; + else out = side.pokemon.find(p => p.baseSpecies.id === input || p.species.id === input); + if (!out) throw new Error(`Pokemon "${side.name} ${input}" not found`); + return out; + }; + const requireInt = (input: string) => { + const num = Number(input); + if (!Number.isInteger(num)) throw new Error(`"${input}" is not an integer`); + return num; + }; + + let user = null; + if (target.startsWith('user:')) { + [user, target] = Utils.splitFirst(target.slice(5), ','); + target = target.trim(); + } + battle.add('html', Utils.html`
${user ? `[${user}] ` : ''}/editbattle ${target}
`); + + let cmd; + [cmd, target] = Utils.splitFirst(target, ' '); + if (cmd.endsWith(',')) cmd = cmd.slice(0, -1); + const targets = target.split(','); + if (targets.length === 1 && targets[0] === '') targets.pop(); + switch (cmd) { + case 'hp': + case 'h': { + if (targets.length !== 3) { + battle.add("||<<< Error: Format should be: hp PLAYER, POKEMON, HP"); + return; + } + const [player, pokemon, hp] = targets; + const p = getPokemon(toID(player), toID(pokemon)); + p.sethp(requireInt(hp)); + if (p.isActive) battle.add('-damage', p, p.getHealth); + break; + } + case 'status': + case 's': { + if (targets.length !== 3) { + battle.add("||<<< Error: Format should be: status PLAYER, POKEMON, STATUS"); + return; + } + const [player, pokemon, status] = targets.map(toID); + const pl = getPlayer(player); + const p = getPokemon(player, pokemon); + p.setStatus(toID(status)); + if (!p.isActive) { + battle.add('', 'please ignore the above'); + battle.add('-status', pl.active[0], pl.active[0].status, '[silent]'); + } + break; + } + case 'pp': { + if (targets.length !== 4) { + battle.add("||<<< Error: Format should be: pp PLAYER, POKEMON, MOVE, PP"); + return; + } + const [player, pokemon, move, pp] = targets; + const p = getPokemon(player, pokemon); + const moveData = p.getMoveData(toID(move)) || p.moveSlots[parseInt(move) - 1]; + if (!moveData) { + battle.add(`||<<< Error: Move "${move}" not found for Pokemon "${player} ${pokemon}"`); + return; + } + moveData.pp = requireInt(pp); + break; + } + case 'boost': + case 'b': { + if (targets.length !== 4) { + battle.add("||<<< Error: Format should be: boost PLAYER, POKEMON, STAT, VALUE"); + return; + } + const [player, pokemon, stat, boostLevel] = targets; + const p = getPokemon(player, pokemon); + const statID = toID(stat) as BoostID; + if (!['atk', 'def', 'spa', 'spd', 'spe', 'accuracy', 'evasion'].includes(statID)) { + battle.add(`||<<< Error: Invalid boost "${stat}:${boostLevel}"`); + return; + } + battle.boost({ [statID]: requireInt(boostLevel) }, p); + break; + } + case 'volatile': + case 'v': { + if (targets.length !== 3) { + battle.add("||<<< Error: Format should be: volatile PLAYER, POKEMON, VOLATILE"); + return; + } + const [player, pokemon, volatile] = targets; + const p = getPokemon(player, pokemon); + p.addVolatile(toID(volatile)); + break; + } + case 'sidecondition': + case 'sc': { + if (targets.length !== 2) { + battle.add("||<<< Error: Format should be: sidecondition PLAYER, SIDECONDITION"); + return; + } + const [player, sideCondition] = targets; + const side = getPlayer(player); + side.addSideCondition(toID(sideCondition), 'debug'); + break; + } + case 'fieldcondition': case 'pseudoweather': + case 'fc': { + if (targets.length !== 1) { + battle.add("||<<< Error: Format should be: fieldcondition FIELD, PSEUDOWEATHER"); + return; + } + const [pseudoWeather] = targets; + battle.field.addPseudoWeather(toID(pseudoWeather), 'debug'); + break; + } + case 'weather': + case 'w': { + if (targets.length !== 1) { + battle.add("||<<< Error: Format should be: weather FIELD, WEATHER"); + return; + } + const [weather] = targets; + battle.field.setWeather(toID(weather), 'debug'); + break; + } + case 'terrain': + case 't': { + if (targets.length !== 1) { + battle.add("||<<< Error: Format should be: terrain FIELD, TERRAIN"); + return; + } + const [terrain] = targets; + battle.field.setTerrain(toID(terrain), 'debug'); + break; + } + case 'reseed': { + battle.resetRNG(target as PRNGSeed); + if (targets.length) battle.add(`||Reseeded to ${targets.join(',')}`); + break; + } + default: + throw new Error(`Unknown editbattle command: ${cmd}`); + } + } override _writeEnd() { // if battle already ended, we don't need to pushEnd. @@ -286,7 +429,7 @@ export function getPlayerStreams(stream: BattleStream) { }; (async () => { for await (const chunk of stream) { - const [type, data] = splitFirst(chunk, `\n`); + const [type, data] = Utils.splitFirst(chunk, `\n`); switch (type) { case 'update': const channelMessages = extractChannelMessages(data, [-1, 0, 1, 2, 3, 4]); @@ -298,7 +441,7 @@ export function getPlayerStreams(stream: BattleStream) { streams.p4.push(channelMessages[4].join('\n')); break; case 'sideupdate': - const [side, sideData] = splitFirst(data, `\n`); + const [side, sideData] = Utils.splitFirst(data, `\n`); streams[side as SideID].push(sideData); break; case 'end': @@ -343,7 +486,7 @@ export abstract class BattlePlayer { receiveLine(line: string) { if (this.debug) console.log(line); if (!line.startsWith('|')) return; - const [cmd, rest] = splitFirst(line.slice(1), '|'); + const [cmd, rest] = Utils.splitFirst(line.slice(1), '|'); if (cmd === 'request') return this.receiveRequest(JSON.parse(rest)); if (cmd === 'error') return this.receiveError(new Error(rest)); this.log.push(line); diff --git a/sim/battle.ts b/sim/battle.ts index b380e0c65a..ab96d039ca 100644 --- a/sim/battle.ts +++ b/sim/battle.ts @@ -604,7 +604,7 @@ export class Battle { this.debug(eventid + ' handler suppressed by Mold Breaker'); return relayVar; } - if (eventid !== 'Start' && eventid !== 'TakeItem' && effect.effectType === 'Item' && + if (eventid !== 'Start' && eventid !== 'TakeItem' && eventid !== 'SetAbility' && effect.effectType === 'Item' && (target instanceof Pokemon) && target.ignoringItem()) { this.debug(eventid + ' handler suppressed by Embargo, Klutz or Magic Room'); return relayVar; @@ -1297,6 +1297,17 @@ export class Battle { return !!move.flags['contact']; } + checkMoveBypassesProtect(move: ActiveMove, attacker: Pokemon, defender: Pokemon, blockStatus = true) { + if ((move.category !== 'Status' || blockStatus) && move.flags['protect'] && + this.runEvent('HitProtect', attacker, defender, move)) { + return false; + } + if (move.isZOrMaxPowered && !['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) { + defender.getMoveHitData(move).bypassProtect = true; + } + return true; + } + skillSwap(source: Pokemon, target: Pokemon) { if (source.fainted || target.fainted) return false; if (source.volatiles['dynamax'] || target.volatiles['dynamax']) return false; @@ -2373,6 +2384,13 @@ export class Battle { return stat; } + calculatePP(move: Move, ppUps = 3) { + if (move.noPPBoosts) return move.pp; + let pp = move.pp * (5 + ppUps) / 5; + if (this.gen <= 2 && move.pp === 40) pp -= ppUps; + return pp; + } + finalModify(relayVar: number) { relayVar = this.modify(relayVar, this.event.modifier); this.event.modifier = 1; @@ -2644,8 +2662,9 @@ export class Battle { // (instead of compounding every time `getActionSpeed` is called) let priority = this.dex.moves.get(move.id).priority; // Grassy Glide priority - priority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, priority); - priority = this.runEvent('ModifyPriority', action.pokemon, null, move, priority); + const target = this.getTarget(action.pokemon, action.move, action.targetLoc); + priority = this.singleEvent('ModifyPriority', move, null, action.pokemon, target, null, priority); + priority = this.runEvent('ModifyPriority', action.pokemon, target, move, priority); action.priority = priority + action.fractionalPriority; // In Gen 6, Quick Guard blocks moves with artificially enhanced priority. if (this.gen > 5) action.move.priority = priority; @@ -2654,7 +2673,13 @@ export class Battle { if (!action.pokemon) { action.speed = 1; } else { - action.speed = action.pokemon.getActionSpeed(); + if (this.gen <= 4 && action.choice === 'move' && action.fractionalPriority < 0) { + // in Gen 4, Pokemon with decrease fractional priority act in reverse speed order + // ignores Trick Room, does not ignore boosts and Simple + action.speed = -action.pokemon.getStat('spe', false, false); + } else { + action.speed = action.pokemon.getActionSpeed(); + } } } @@ -3194,8 +3219,8 @@ export class Battle { ivs: null!, level: set.level, }; - if (this.gen === 8) newSet.gigantamax = set.gigantamax; - if (this.gen === 9) newSet.teraType = set.teraType; + if (this.gen === 8 && !this.ruleTable.has('dynamaxclause')) newSet.gigantamax = set.gigantamax; + if (this.gen === 9 && !this.ruleTable.has('terastalclause')) newSet.teraType = set.teraType; // Only display Hidden Power type if the Pokemon has Hidden Power // This is based on how team sheets were written in past VGC formats if (set.moves.some(m => this.dex.moves.get(m).id === 'hiddenpower')) newSet.hpType = set.hpType; diff --git a/sim/dex-conditions.ts b/sim/dex-conditions.ts index f900795ad6..4fd867aaf0 100644 --- a/sim/dex-conditions.ts +++ b/sim/dex-conditions.ts @@ -53,10 +53,11 @@ export interface EventMethods { onEntryHazard?: (this: Battle, pokemon: Pokemon) => void; onFaint?: CommonHandlers['VoidEffect']; onFlinch?: ((this: Battle, pokemon: Pokemon) => boolean | void) | boolean; - onFractionalPriority?: CommonHandlers['ModifierSourceMove'] | -0.1; + onFractionalPriority?: CommonHandlers['ModifierSourceMove'] | -0.1 | -0.2; onHit?: MoveEventMethods['onHit']; onImmunity?: (this: Battle, type: string, pokemon: Pokemon) => void; onLockMove?: string | ((this: Battle, pokemon: Pokemon) => void | string); + onSemiLockMove?: string | ((this: Battle, pokemon: Pokemon) => void | string); onMaybeTrapPokemon?: (this: Battle, pokemon: Pokemon) => void; onModifyAccuracy?: CommonHandlers['ModifierMove']; onModifyAtk?: CommonHandlers['ModifierSourceMove']; @@ -86,8 +87,8 @@ export interface EventMethods { ) => Pokemon | void; onResidual?: (this: Battle, target: Pokemon, source: Pokemon, effect: Effect) => void; onSetAbility?: ( - this: Battle, ability: string, target: Pokemon, source: Pokemon, effect: Effect - ) => null | void; + (this: Battle, ability: string, target: Pokemon, source: Pokemon, effect: Effect) => null | void + ) | boolean; onSetStatus?: ( this: Battle, status: Condition, target: Pokemon, source: Pokemon, effect: Effect ) => boolean | null | void; @@ -106,6 +107,7 @@ export interface EventMethods { onTryAddVolatile?: ( this: Battle, status: Condition, target: Pokemon, source: Pokemon, sourceEffect: Effect ) => boolean | null | void; + onHitProtect?: MoveEventMethods['onTryHit']; onTryEatItem?: boolean | ((this: Battle, item: Item, pokemon: Pokemon) => boolean | void); onTryHeal?: ( ((this: Battle, relayVar: number, target: Pokemon, source: Pokemon, effect: Effect) => number | boolean | null | void) @@ -449,6 +451,7 @@ export interface EventMethods { onChangeBoostPriority?: number; onDamagePriority?: number; onDragOutPriority?: number; + onDisableMovePriority?: number; onEffectivenessPriority?: number; onFoeBasePowerPriority?: number; onFoeBeforeMovePriority?: number; diff --git a/sim/dex-formats.ts b/sim/dex-formats.ts index b0b4a5fcd8..e093257cb2 100644 --- a/sim/dex-formats.ts +++ b/sim/dex-formats.ts @@ -281,6 +281,9 @@ export class RuleTable extends Map { if (format.mod === 'gen7letsgo') { this.evLimit = this.has('lgpenormalrules') ? 0 : null; } + if (format.mod === 'champions') { + this.evLimit = 66; + } // Gen 6 hackmons also has a limit, which is currently implemented // at the appropriate format. } @@ -365,28 +368,6 @@ export class RuleTable extends Map { if (timer.maxFirstTurn !== undefined && (timer.maxFirstTurn < 10 || timer.maxFirstTurn > 1200)) { throw new Error(`Timer max first turn value ${timer.maxFirstTurn}${this.blame('timermaxfirstturn')} must be between 10 and 1200 seconds.`); } - - if ((format as any).cupLevelLimit) { - throw new Error(`cupLevelLimit.range[0], cupLevelLimit.range[1], cupLevelLimit.total are now rules, respectively: "Min Level = NUMBER", "Max Level = NUMBER", and "Max Total Level = NUMBER"`); - } - if ((format as any).teamLength) { - throw new Error(`teamLength.validate[0], teamLength.validate[1], teamLength.battle are now rules, respectively: "Min Team Size = NUMBER", "Max Team Size = NUMBER", and "Picked Team Size = NUMBER"`); - } - if ((format as any).minSourceGen) { - throw new Error(`minSourceGen is now a rule: "Min Source Gen = NUMBER"`); - } - if ((format as any).maxLevel) { - throw new Error(`maxLevel is now a rule: "Max Level = NUMBER"`); - } - if ((format as any).defaultLevel) { - throw new Error(`defaultLevel is now a rule: "Default Level = NUMBER"`); - } - if ((format as any).forcedLevel) { - throw new Error(`forcedLevel is now a rule: "Adjust Level = NUMBER"`); - } - if ((format as any).maxForcedLevel) { - throw new Error(`maxForcedLevel is now a rule: "Adjust Level Down = NUMBER"`); - } } hasComplexBans() { @@ -455,6 +436,7 @@ export class Format extends BasicEffect implements Readonly { declare readonly searchShow?: boolean; declare readonly bestOfDefault?: boolean; declare readonly teraPreviewDefault?: boolean; + declare readonly itemClauseDefault?: boolean; declare readonly threads?: string[]; declare readonly tournamentShow?: boolean; declare readonly checkCanLearn?: ( @@ -622,9 +604,12 @@ export class DexFormats { if (format.tournamentShow === undefined) format.tournamentShow = true; if (format.bestOfDefault === undefined) format.bestOfDefault = false; if (format.teraPreviewDefault === undefined) format.teraPreviewDefault = false; + if (format.itemClauseDefault === undefined) format.itemClauseDefault = false; if (format.mod === undefined) format.mod = 'gen9'; if (!this.dex.dexes[format.mod]) throw new Error(`Format "${format.name}" requires nonexistent mod: '${format.mod}'`); + this.checkDeprecated(format); + const ruleset = new Format(format); this.rulesetCache.set(id, ruleset); formatsList.push(ruleset); @@ -634,6 +619,30 @@ export class DexFormats { return this; } + checkDeprecated(format: AnyObject) { + if (format.cupLevelLimit) { + throw new Error(`cupLevelLimit.range[0], cupLevelLimit.range[1], cupLevelLimit.total are now rules, respectively: "Min Level = NUMBER", "Max Level = NUMBER", and "Max Total Level = NUMBER"`); + } + if (format.teamLength) { + throw new Error(`teamLength.validate[0], teamLength.validate[1], teamLength.battle are now rules, respectively: "Min Team Size = NUMBER", "Max Team Size = NUMBER", and "Picked Team Size = NUMBER"`); + } + if (format.minSourceGen) { + throw new Error(`minSourceGen is now a rule: "Min Source Gen = NUMBER"`); + } + if (format.maxLevel) { + throw new Error(`maxLevel is now a rule: "Max Level = NUMBER"`); + } + if (format.defaultLevel) { + throw new Error(`defaultLevel is now a rule: "Default Level = NUMBER"`); + } + if (format.forcedLevel) { + throw new Error(`forcedLevel is now a rule: "Adjust Level = NUMBER"`); + } + if (format.maxForcedLevel) { + throw new Error(`maxForcedLevel is now a rule: "Adjust Level Down = NUMBER"`); + } + } + /** * Returns a sanitized format ID if valid, or throws if invalid. */ diff --git a/sim/dex-items.ts b/sim/dex-items.ts index 137b27cd42..4546cffe9c 100644 --- a/sim/dex-items.ts +++ b/sim/dex-items.ts @@ -16,6 +16,7 @@ export interface ItemData extends Partial, PokemonEventMethods { export type ModdedItemData = ItemData | Partial> & { inherit: true, onCustap?: (this: Battle, pokemon: Pokemon) => void, + onWhiteHerb?: (this: Battle, pokemon: Pokemon) => void, condition?: ModdedConditionData, }; diff --git a/sim/dex-moves.ts b/sim/dex-moves.ts index 438d7c4901..f159dc1155 100644 --- a/sim/dex-moves.ts +++ b/sim/dex-moves.ts @@ -210,7 +210,10 @@ export interface MoveData extends EffectData, MoveEventMethods, HitEffect { secondary?: SecondaryEffect; secondaries?: SecondaryEffect[]; self?: SecondaryEffect; - hasSheerForce?: boolean; + /** + * Boosted by Sheer Force without suppressing secondary effects. + */ + hasSheerForceBoost?: boolean; // Hit effect modifiers // -------------------- @@ -299,7 +302,7 @@ interface MoveHitData { * Is this move a Z-Move that broke the target's protection? * (does 0.25x regular damage) */ - zBrokeProtect: boolean, + bypassProtect: boolean | Effect, }; } @@ -335,7 +338,6 @@ export interface ActiveMove extends MutableMove { stellarBoosted?: boolean; totalDamage?: number | false; typeChangerBoosted?: Effect; - willChangeForme?: boolean; infiltrates?: boolean; ruinedAtk?: Pokemon; ruinedDef?: Pokemon; @@ -384,10 +386,10 @@ export class DataMove extends BasicEffect implements Readonly